2017-11-14 2 views
0

ultimatelistctrl 내에서 각 확인란의 상태를 가져 오는 방법을 알아 내려고하고 있습니다. 또한 모든 상자를 확인하거나 선택을 취소 할 수 있어야합니다.listctrl에서 체크 상자 상태 가져 오기

이것은이 프로젝트에서 내 두 번째 시도입니다. 첫 번째는 listctrl의 어떤 형식도 사용하지 않았으며 기능적 임에도 불구하고 상당히 추함입니다. 나는 새로운 버전에서 같은 바인딩 기법을 사용하려고했지만, 여기서는 적용하지 않는 것 같다. 감사합니다. 감사합니다.

옳게든 잘못 되었든, 새 버전이므로 새 스레드를 시작했습니다. 여기에 이전의 하나입니다 Previous question/answer

import sys 
import wx 
import wx.lib.agw.ultimatelistctrl as ULC 


class MyFrame(wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, -1, "Checkbox grid based on UltimateListCtrl Demo", size=(600,300)) 
     agwStyle = (ULC.ULC_HAS_VARIABLE_ROW_HEIGHT | wx.LC_REPORT | wx.LC_VRULES | wx.LC_HRULES | wx.LC_SINGLE_SEL) 
     self.mylist = mylist = ULC.UltimateListCtrl(self, wx.ID_ANY, agwStyle=agwStyle) 

     mylist.InsertColumn(0,"", width=100) 

     for col in range(1,25): 
      col_num=str(col-1) 
      if col==0:col_num="" 
      mylist.InsertColumn(col,col_num, width=20) 


     self.checkboxes = {} 
     self.boxes=[] 

     for day in range(7): 
      days=["Monday", "Sunday", "Saturday", "Friday", "Thursday", "Wednesday", "Tuesday"] 
      index = mylist.InsertStringItem(1, "" + days[day]) 
      mylist.SetStringItem(index, 1, "") 


     for boxes in range(1,25): 
      for index in range(7): 
       mylist.SetStringItem(index, boxes, "") 
       checkBox = wx.CheckBox(mylist, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0) 
       self.checkboxes[checkBox.GetId()] = index 
       mylist.SetItemWindow(index, boxes, checkBox) 
       self.boxes.append(self.checkboxes)     

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(mylist, 1, wx.EXPAND) 
     self.SetSizer(sizer) 




app = wx.App() 
frame = MyFrame(None) 
app.SetTopWindow(frame) 
frame.Show() 
app.MainLoop() 

답변

0

당신은 CheckBox하고 days가 엉망이되었다 아니라 dict 항목을 추가했다.

import sys 
import wx 
import wx.lib.agw.ultimatelistctrl as ULC 


class MyFrame(wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, -1, "Checkbox grid based on UltimateListCtrl Demo", size=(600,300)) 
     agwStyle = (ULC.ULC_HAS_VARIABLE_ROW_HEIGHT | wx.LC_REPORT | wx.LC_VRULES | wx.LC_HRULES | wx.LC_SINGLE_SEL) 
     self.mylist = mylist = ULC.UltimateListCtrl(self, wx.ID_ANY, agwStyle=agwStyle) 

     mylist.InsertColumn(0,"", width=100) 

     for col in range(1,25): 
      col_num=str(col-1) 
      if col==0:col_num="" 
      mylist.InsertColumn(col,col_num, width=20) 


     self.checkboxes = {} 
     self.boxes=[] 

     for day in range(7): 
#   days=["Monday", "Sunday", "Saturday", "Friday", "Thursday", "Wednesday", "Tuesday"] 
      days=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] 
      mylist.InsertStringItem(day, str(days[day])) 
      #index = mylist.InsertStringItem(1, "" + days[day]) 
      #mylist.SetStringItem(index, 1, "") 


     for boxes in range(1,25): 
      for index in range(7): 
       day = days[index] 
       hour = boxes-1 
       name_of_checkbox = "{day}_{hour}".format(day=day, hour=hour) 
       mylist.SetStringItem(index, boxes, "") 
       self.checkBox = wx.CheckBox(mylist, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0,name=name_of_checkbox) 
       #self.checkBox.SetValue(True) #Use this to check all boxes 
       self.checkboxes[self.checkBox.GetId()] = index 
       mylist.SetItemWindow(index, boxes, self.checkBox) 
       self.boxes.append(self.checkBox) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(mylist, 1, wx.EXPAND) 
     button = wx.Button(self,-1,"Retrieve Data") 
     sizer.Add(button) 
     self.Bind(wx.EVT_CHECKBOX, self.OnChecked) 
     self.Bind(wx.EVT_BUTTON, self.OnGetData) 
     self.SetSizer(sizer) 

    def OnChecked(self,event): 
     clicked = event.GetEventObject() 
     print (clicked.GetName()) 
     print (event.IsChecked()) 

    def OnGetData(self,event): 
     day_dict = {} 
     day_list = [] 
     for i in self.boxes: 
      if i.IsChecked(): 
       n = i.GetName() 
       day_dict[n]="Checked" 
       day_list.append((n,"Checked")) 
     print (day_dict) 
     print (day_list) 



app = wx.App() 
frame = MyFrame(None) 
app.SetTopWindow(frame) 
frame.Show() 
app.MainLoop() 

enter image description here

출력 :

Monday_0 
True 
Tuesday_1 
True 
Wednesday_2 
True 
Thursday_3 
True 
Friday_4 
True 
Saturday_5 
True 
Sunday_6 
True 
Saturday_7 
True 
Friday_8 
True 
Thursday_9 
True 
Wednesday_10 
True 
Tuesday_12 
True 
Tuesday_11 
True 
Tuesday_12 
False 
Monday_12 
True 
{'Thursday_3': 'Checked', 'Tuesday_1': 'Checked', 'Saturday_7': 'Checked', 'Monday_12': 'Checked', 'Friday_8': 'Checked', 'Thursday_9': 'Checked', 'Wednesday_10': 'Checked', 'Saturday_5': 'Checked', 'Tuesday_11': 'Checked', 'Friday_4': 'Checked', 'Wednesday_2': 'Checked', 'Sunday_6': 'Checked', 'Monday_0': 'Checked'} 

[('Monday_0', 'Checked'), ('Tuesday_1', 'Checked'), ('Wednesday_2', 'Checked'), ('Thursday_3', 'Checked'), ('Friday_4', 'Checked'), ('Saturday_5', 'Checked'), ('Sunday_6', 'Checked'), ('Saturday_7', 'Checked'), ('Friday_8', 'Checked'), ('Thursday_9', 'Checked'), ('Wednesday_10', 'Checked'), ('Tuesday_11', 'Checked'), ('Monday_12', 'Checked')] 
+0

우수, 감사 롤프. –

관련 문제