2017-11-14 30 views
0

私はultimatelistctrl内の各チェックボックスの状態を取得する方法を把握しようとしています。私はまた、すべてのボックスをチェックしたり、チェックを外す必要があります。listctrlのチェックボックスの状態を取得

これはこのプロジェクトで私の2番目の試みです。最初は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

優れ、感謝ロルフ。 –

関連する問題