从动态创建的wx.checkbox中获取价值

时间:2017-11-08 07:41:40

标签: python wxpython wxwidgets

此代码(感谢Mike Driscoll)创建了一个包含168个复选框的网格,每个小时每天一个。在检索他们的价值时我很困惑...... 我想得到一个像{mon1:yes}等字典。 任何帮助表示赞赏...

import wx

class MainPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        main_sizer = wx.BoxSizer(wx.VERTICAL)

        for row in range(7):
            row_sizer = wx.BoxSizer(wx.HORIZONTAL)
            for col in range(24):
                name_of_checkbox = "row_{row}_col_{col}".format(row=row, col=col)
                checkbox = wx.CheckBox(self, name=name_of_checkbox)
                row_sizer.Add(checkbox, 0, wx.ALL, 5)
            main_sizer.Add(row_sizer)

        self.SetSizer(main_sizer)


class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Hours and days', size=(650, 400))
        panel = MainPanel(self)
        self.Show()


if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
app.MainLoop()

2 个答案:

答案 0 :(得分:0)

创建复选框时需要绑定事件。然后使用getValue()函数获取复选框状态。

import wx

class MainPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        main_sizer = wx.BoxSizer(wx.VERTICAL)

        for row in range(7):
            row_sizer = wx.BoxSizer(wx.HORIZONTAL)
            for col in range(24):
                name_of_checkbox = "row_{row}_col_{col}".format(row=row, col=col)
                checkbox = wx.CheckBox(self, name=name_of_checkbox)

                #self.Bind(wx.EVT_CHECKBOX, self.onChecked)

                row_sizer.Add(checkbox, 0, wx.ALL, 5)
            main_sizer.Add(row_sizer)

        self.SetSizer(main_sizer)

    #def onChecked(self, e):
        #cb = e.GetEventObject()
        #print (cb.GetName(), ' is clicked', cb.GetValue())

class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Hours and days', size=(900, 400))
        panel = MainPanel(self)

        self.Bind(wx.EVT_CHECKBOX, self.OnButtonClicked)
        self.Show()
        self.user_dict = dict()
        self.initDict()

    def OnButtonClicked(self, e):
        cb = e.GetEventObject()
        print (cb.GetName(), ' is clicked', cb.GetValue())
        self.user_dict[cb.GetName()] = cb.GetValue()

        print(self.user_dict)

    def initDict(self):
        for row in range(7):
            for col in range(24):
                name_of_checkbox = "row_{row}_col_{col}".format(row=row, col=col)
                self.user_dict[name_of_checkbox] = False


if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
    app.MainLoop()

输出可能是这样的:

(u'row_4_col_7', ' is clicked', True)
{'row_0_col_0': False, 'row_0_col_1': False, 'row_0_col_2': False, 'row_0_col_3': False, 'row_0_col_4': False, 'row_0_col_5': False, 'row_0_col_6': False, 'row_0_col_7': False, 'row_0_col_8': False, 'row_0_col_9': False, 'row_4_col_13': False, 'row_1_col_15': False, 'row_1_col_14': False, 'row_1_col_17': False, 'row_1_col_16': False, 'row_1_col_11': False, 'row_1_col_10': False, 'row_1_col_13': False, 'row_1_col_12': False, 'row_1_col_19': False, 'row_1_col_18': False, 'row_6_col_10': False, 'row_6_col_11': False, 'row_6_col_12': False, 'row_1_col_0': False, 'row_6_col_13': False, 'row_1_col_3': False, 'row_1_col_9': False, 'row_1_col_8': False, 'row_2_col_21': False, 'row_2_col_20': False, 'row_2_col_23': False, 'row_2_col_22': False, 'row_1_col_5': False, 'row_1_col_4': False, 'row_1_col_7': False, 'row_1_col_6': False, 'row_6_col_21': False, 'row_6_col_20': False, 'row_6_col_4': False, 'row_3_col_19': False, 'row_3_col_18': False, 'row_6_col_23': False, 'row_3_col_13': False, 'row_3_col_12': False, 'row_3_col_11': False, 'row_3_col_10': False, 'row_3_col_17': False, 'row_3_col_16': False, 'row_3_col_15': False, 'row_3_col_14': False, 'row_6_col_5': False, 'row_6_col_14': False, 'row_6_col_15': False, 'row_6_col_16': False, 'row_6_col_17': False, 'row_0_col_23': False, 'row_0_col_22': False, 'row_0_col_21': False, 'row_0_col_20': False, 'row_6_col_18': False, 'row_6_col_19': False, 'row_5_col_20': False, 'row_5_col_21': False, 'row_5_col_22': False, 'row_5_col_23': False, 'row_4_col_23': False, 'row_4_col_22': False, 'row_4_col_21': False, 'row_4_col_20': False, 'row_6_col_2': False, 'row_1_col_1': False, 'row_6_col_0': False, 'row_6_col_1': False, 'row_3_col_22': False, 'row_3_col_23': False, 'row_2_col_8': False, 'row_2_col_9': False, 'row_2_col_6': False, 'row_2_col_7': False, 'row_2_col_4': False, 'row_2_col_5': False, 'row_2_col_2': False, 'row_2_col_3': False, 'row_2_col_0': False, 'row_2_col_1': False, 'row_1_col_2': False, 'row_6_col_3': False, 'row_0_col_12': False, 'row_0_col_13': False, 'row_0_col_10': False, 'row_0_col_11': False, 'row_0_col_16': False, 'row_0_col_17': False, 'row_0_col_14': False, 'row_0_col_15': False, 'row_6_col_6': False, 'row_0_col_18': False, 'row_0_col_19': False, 'row_6_col_7': False, 'row_4_col_16': False, 'row_4_col_17': False, 'row_4_col_14': False, 'row_4_col_15': False, 'row_4_col_12': False, 'row_3_col_20': False, 'row_4_col_10': False, 'row_4_col_11': False, 'row_3_col_21': False, 'row_4_col_18': False, 'row_4_col_19': False, 'row_6_col_8': False, 'row_6_col_9': False, 'row_4_col_4': False, 'row_4_col_5': False, 'row_4_col_6': False, 'row_4_col_7': True, 'row_4_col_0': False, 'row_4_col_1': False, 'row_4_col_2': False, 'row_4_col_3': False, 'row_4_col_8': False, 'row_4_col_9': False, 'row_2_col_10': False, 'row_2_col_11': False, 'row_2_col_12': False, 'row_2_col_13': False, 'row_2_col_14': False, 'row_2_col_15': False, 'row_2_col_16': False, 'row_2_col_17': False, 'row_2_col_18': False, 'row_2_col_19': False, 'row_6_col_22': False, 'row_5_col_9': False, 'row_5_col_8': False, 'row_5_col_5': False, 'row_5_col_4': False, 'row_5_col_7': False, 'row_5_col_6': False, 'row_5_col_1': False, 'row_5_col_0': False, 'row_5_col_3': False, 'row_5_col_2': False, 'row_1_col_20': False, 'row_1_col_21': False, 'row_1_col_22': False, 'row_1_col_23': False, 'row_3_col_7': False, 'row_3_col_6': False, 'row_3_col_5': False, 'row_3_col_4': False, 'row_3_col_3': False, 'row_3_col_2': False, 'row_3_col_1': False, 'row_3_col_0': False, 'row_3_col_9': False, 'row_3_col_8': False, 'row_5_col_19': False, 'row_5_col_18': False, 'row_5_col_11': False, 'row_5_col_10': False, 'row_5_col_13': False, 'row_5_col_12': False, 'row_5_col_15': False, 'row_5_col_14': False, 'row_5_col_17': False, 'row_5_col_16': False}
(u'row_0_col_0', ' is clicked', True)
{'row_0_col_0': True, 'row_0_col_1': False, 'row_0_col_2': False, 'row_0_col_3': False, 'row_0_col_4': False, 'row_0_col_5': False, 'row_0_col_6': False, 'row_0_col_7': False, 'row_0_col_8': False, 'row_0_col_9': False, 'row_4_col_13': False, 'row_1_col_15': False, 'row_1_col_14': False, 'row_1_col_17': False, 'row_1_col_16': False, 'row_1_col_11': False, 'row_1_col_10': False, 'row_1_col_13': False, 'row_1_col_12': False, 'row_1_col_19': False, 'row_1_col_18': False, 'row_6_col_10': False, 'row_6_col_11': False, 'row_6_col_12': False, 'row_1_col_0': False, 'row_6_col_13': False, 'row_1_col_3': False, 'row_1_col_9': False, 'row_1_col_8': False, 'row_2_col_21': False, 'row_2_col_20': False, 'row_2_col_23': False, 'row_2_col_22': False, 'row_1_col_5': False, 'row_1_col_4': False, 'row_1_col_7': False, 'row_1_col_6': False, 'row_6_col_21': False, 'row_6_col_20': False, 'row_6_col_4': False, 'row_3_col_19': False, 'row_3_col_18': False, 'row_6_col_23': False, 'row_3_col_13': False, 'row_3_col_12': False, 'row_3_col_11': False, 'row_3_col_10': False, 'row_3_col_17': False, 'row_3_col_16': False, 'row_3_col_15': False, 'row_3_col_14': False, 'row_6_col_5': False, 'row_6_col_14': False, 'row_6_col_15': False, 'row_6_col_16': False, 'row_6_col_17': False, 'row_0_col_23': False, 'row_0_col_22': False, 'row_0_col_21': False, 'row_0_col_20': False, 'row_6_col_18': False, 'row_6_col_19': False, 'row_5_col_20': False, 'row_5_col_21': False, 'row_5_col_22': False, 'row_5_col_23': False, 'row_4_col_23': False, 'row_4_col_22': False, 'row_4_col_21': False, 'row_4_col_20': False, 'row_6_col_2': False, 'row_1_col_1': False, 'row_6_col_0': False, 'row_6_col_1': False, 'row_3_col_22': False, 'row_3_col_23': False, 'row_2_col_8': False, 'row_2_col_9': False, 'row_2_col_6': False, 'row_2_col_7': False, 'row_2_col_4': False, 'row_2_col_5': False, 'row_2_col_2': False, 'row_2_col_3': False, 'row_2_col_0': False, 'row_2_col_1': False, 'row_1_col_2': False, 'row_6_col_3': False, 'row_0_col_12': False, 'row_0_col_13': False, 'row_0_col_10': False, 'row_0_col_11': False, 'row_0_col_16': False, 'row_0_col_17': False, 'row_0_col_14': False, 'row_0_col_15': False, 'row_6_col_6': False, 'row_0_col_18': False, 'row_0_col_19': False, 'row_6_col_7': False, 'row_4_col_16': False, 'row_4_col_17': False, 'row_4_col_14': False, 'row_4_col_15': False, 'row_4_col_12': False, 'row_3_col_20': False, 'row_4_col_10': False, 'row_4_col_11': False, 'row_3_col_21': False, 'row_4_col_18': False, 'row_4_col_19': False, 'row_6_col_8': False, 'row_6_col_9': False, 'row_4_col_4': False, 'row_4_col_5': False, 'row_4_col_6': False, 'row_4_col_7': True, 'row_4_col_0': False, 'row_4_col_1': False, 'row_4_col_2': False, 'row_4_col_3': False, 'row_4_col_8': False, 'row_4_col_9': False, 'row_2_col_10': False, 'row_2_col_11': False, 'row_2_col_12': False, 'row_2_col_13': False, 'row_2_col_14': False, 'row_2_col_15': False, 'row_2_col_16': False, 'row_2_col_17': False, 'row_2_col_18': False, 'row_2_col_19': False, 'row_6_col_22': False, 'row_5_col_9': False, 'row_5_col_8': False, 'row_5_col_5': False, 'row_5_col_4': False, 'row_5_col_7': False, 'row_5_col_6': False, 'row_5_col_1': False, 'row_5_col_0': False, 'row_5_col_3': False, 'row_5_col_2': False, 'row_1_col_20': False, 'row_1_col_21': False, 'row_1_col_22': False, 'row_1_col_23': False, 'row_3_col_7': False, 'row_3_col_6': False, 'row_3_col_5': False, 'row_3_col_4': False, 'row_3_col_3': False, 'row_3_col_2': False, 'row_3_col_1': False, 'row_3_col_0': False, 'row_3_col_9': False, 'row_3_col_8': False, 'row_5_col_19': False, 'row_5_col_18': False, 'row_5_col_11': False, 'row_5_col_10': False, 'row_5_col_13': False, 'row_5_col_12': False, 'row_5_col_15': False, 'row_5_col_14': False, 'row_5_col_17': False, 'row_5_col_16': False}
(u'row_0_col_1', ' is clicked', True)
{'row_0_col_0': True, 'row_0_col_1': True, 'row_0_col_2': False, 'row_0_col_3': False, 'row_0_col_4': False, 'row_0_col_5': False, 'row_0_col_6': False, 'row_0_col_7': False, 'row_0_col_8': False, 'row_0_col_9': False, 'row_4_col_13': False, 'row_1_col_15': False, 'row_1_col_14': False, 'row_1_col_17': False, 'row_1_col_16': False, 'row_1_col_11': False, 'row_1_col_10': False, 'row_1_col_13': False, 'row_1_col_12': False, 'row_1_col_19': False, 'row_1_col_18': False, 'row_6_col_10': False, 'row_6_col_11': False, 'row_6_col_12': False, 'row_1_col_0': False, 'row_6_col_13': False, 'row_1_col_3': False, 'row_1_col_9': False, 'row_1_col_8': False, 'row_2_col_21': False, 'row_2_col_20': False, 'row_2_col_23': False, 'row_2_col_22': False, 'row_1_col_5': False, 'row_1_col_4': False, 'row_1_col_7': False, 'row_1_col_6': False, 'row_6_col_21': False, 'row_6_col_20': False, 'row_6_col_4': False, 'row_3_col_19': False, 'row_3_col_18': False, 'row_6_col_23': False, 'row_3_col_13': False, 'row_3_col_12': False, 'row_3_col_11': False, 'row_3_col_10': False, 'row_3_col_17': False, 'row_3_col_16': False, 'row_3_col_15': False, 'row_3_col_14': False, 'row_6_col_5': False, 'row_6_col_14': False, 'row_6_col_15': False, 'row_6_col_16': False, 'row_6_col_17': False, 'row_0_col_23': False, 'row_0_col_22': False, 'row_0_col_21': False, 'row_0_col_20': False, 'row_6_col_18': False, 'row_6_col_19': False, 'row_5_col_20': False, 'row_5_col_21': False, 'row_5_col_22': False, 'row_5_col_23': False, 'row_4_col_23': False, 'row_4_col_22': False, 'row_4_col_21': False, 'row_4_col_20': False, 'row_6_col_2': False, 'row_1_col_1': False, 'row_6_col_0': False, 'row_6_col_1': False, 'row_3_col_22': False, 'row_3_col_23': False, 'row_2_col_8': False, 'row_2_col_9': False, 'row_2_col_6': False, 'row_2_col_7': False, 'row_2_col_4': False, 'row_2_col_5': False, 'row_2_col_2': False, 'row_2_col_3': False, 'row_2_col_0': False, 'row_2_col_1': False, 'row_1_col_2': False, 'row_6_col_3': False, 'row_0_col_12': False, 'row_0_col_13': False, 'row_0_col_10': False, 'row_0_col_11': False, 'row_0_col_16': False, 'row_0_col_17': False, 'row_0_col_14': False, 'row_0_col_15': False, 'row_6_col_6': False, 'row_0_col_18': False, 'row_0_col_19': False, 'row_6_col_7': False, 'row_4_col_16': False, 'row_4_col_17': False, 'row_4_col_14': False, 'row_4_col_15': False, 'row_4_col_12': False, 'row_3_col_20': False, 'row_4_col_10': False, 'row_4_col_11': False, 'row_3_col_21': False, 'row_4_col_18': False, 'row_4_col_19': False, 'row_6_col_8': False, 'row_6_col_9': False, 'row_4_col_4': False, 'row_4_col_5': False, 'row_4_col_6': False, 'row_4_col_7': True, 'row_4_col_0': False, 'row_4_col_1': False, 'row_4_col_2': False, 'row_4_col_3': False, 'row_4_col_8': False, 'row_4_col_9': False, 'row_2_col_10': False, 'row_2_col_11': False, 'row_2_col_12': False, 'row_2_col_13': False, 'row_2_col_14': False, 'row_2_col_15': False, 'row_2_col_16': False, 'row_2_col_17': False, 'row_2_col_18': False, 'row_2_col_19': False, 'row_6_col_22': False, 'row_5_col_9': False, 'row_5_col_8': False, 'row_5_col_5': False, 'row_5_col_4': False, 'row_5_col_7': False, 'row_5_col_6': False, 'row_5_col_1': False, 'row_5_col_0': False, 'row_5_col_3': False, 'row_5_col_2': False, 'row_1_col_20': False, 'row_1_col_21': False, 'row_1_col_22': False, 'row_1_col_23': False, 'row_3_col_7': False, 'row_3_col_6': False, 'row_3_col_5': False, 'row_3_col_4': False, 'row_3_col_3': False, 'row_3_col_2': False, 'row_3_col_1': False, 'row_3_col_0': False, 'row_3_col_9': False, 'row_3_col_8': False, 'row_5_col_19': False, 'row_5_col_18': False, 'row_5_col_11': False, 'row_5_col_10': False, 'row_5_col_13': False, 'row_5_col_12': False, 'row_5_col_15': False, 'row_5_col_14': False, 'row_5_col_17': False, 'row_5_col_16': False}
(u'row_0_col_2', ' is clicked', True)
{'row_0_col_0': True, 'row_0_col_1': True, 'row_0_col_2': True, 'row_0_col_3': False, 'row_0_col_4': False, 'row_0_col_5': False, 'row_0_col_6': False, 'row_0_col_7': False, 'row_0_col_8': False, 'row_0_col_9': False, 'row_4_col_13': False, 'row_1_col_15': False, 'row_1_col_14': False, 'row_1_col_17': False, 'row_1_col_16': False, 'row_1_col_11': False, 'row_1_col_10': False, 'row_1_col_13': False, 'row_1_col_12': False, 'row_1_col_19': False, 'row_1_col_18': False, 'row_6_col_10': False, 'row_6_col_11': False, 'row_6_col_12': False, 'row_1_col_0': False, 'row_6_col_13': False, 'row_1_col_3': False, 'row_1_col_9': False, 'row_1_col_8': False, 'row_2_col_21': False, 'row_2_col_20': False, 'row_2_col_23': False, 'row_2_col_22': False, 'row_1_col_5': False, 'row_1_col_4': False, 'row_1_col_7': False, 'row_1_col_6': False, 'row_6_col_21': False, 'row_6_col_20': False, 'row_6_col_4': False, 'row_3_col_19': False, 'row_3_col_18': False, 'row_6_col_23': False, 'row_3_col_13': False, 'row_3_col_12': False, 'row_3_col_11': False, 'row_3_col_10': False, 'row_3_col_17': False, 'row_3_col_16': False, 'row_3_col_15': False, 'row_3_col_14': False, 'row_6_col_5': False, 'row_6_col_14': False, 'row_6_col_15': False, 'row_6_col_16': False, 'row_6_col_17': False, 'row_0_col_23': False, 'row_0_col_22': False, 'row_0_col_21': False, 'row_0_col_20': False, 'row_6_col_18': False, 'row_6_col_19': False, 'row_5_col_20': False, 'row_5_col_21': False, 'row_5_col_22': False, 'row_5_col_23': False, 'row_4_col_23': False, 'row_4_col_22': False, 'row_4_col_21': False, 'row_4_col_20': False, 'row_6_col_2': False, 'row_1_col_1': False, 'row_6_col_0': False, 'row_6_col_1': False, 'row_3_col_22': False, 'row_3_col_23': False, 'row_2_col_8': False, 'row_2_col_9': False, 'row_2_col_6': False, 'row_2_col_7': False, 'row_2_col_4': False, 'row_2_col_5': False, 'row_2_col_2': False, 'row_2_col_3': False, 'row_2_col_0': False, 'row_2_col_1': False, 'row_1_col_2': False, 'row_6_col_3': False, 'row_0_col_12': False, 'row_0_col_13': False, 'row_0_col_10': False, 'row_0_col_11': False, 'row_0_col_16': False, 'row_0_col_17': False, 'row_0_col_14': False, 'row_0_col_15': False, 'row_6_col_6': False, 'row_0_col_18': False, 'row_0_col_19': False, 'row_6_col_7': False, 'row_4_col_16': False, 'row_4_col_17': False, 'row_4_col_14': False, 'row_4_col_15': False, 'row_4_col_12': False, 'row_3_col_20': False, 'row_4_col_10': False, 'row_4_col_11': False, 'row_3_col_21': False, 'row_4_col_18': False, 'row_4_col_19': False, 'row_6_col_8': False, 'row_6_col_9': False, 'row_4_col_4': False, 'row_4_col_5': False, 'row_4_col_6': False, 'row_4_col_7': True, 'row_4_col_0': False, 'row_4_col_1': False, 'row_4_col_2': False, 'row_4_col_3': False, 'row_4_col_8': False, 'row_4_col_9': False, 'row_2_col_10': False, 'row_2_col_11': False, 'row_2_col_12': False, 'row_2_col_13': False, 'row_2_col_14': False, 'row_2_col_15': False, 'row_2_col_16': False, 'row_2_col_17': False, 'row_2_col_18': False, 'row_2_col_19': False, 'row_6_col_22': False, 'row_5_col_9': False, 'row_5_col_8': False, 'row_5_col_5': False, 'row_5_col_4': False, 'row_5_col_7': False, 'row_5_col_6': False, 'row_5_col_1': False, 'row_5_col_0': False, 'row_5_col_3': False, 'row_5_col_2': False, 'row_1_col_20': False, 'row_1_col_21': False, 'row_1_col_22': False, 'row_1_col_23': False, 'row_3_col_7': False, 'row_3_col_6': False, 'row_3_col_5': False, 'row_3_col_4': False, 'row_3_col_3': False, 'row_3_col_2': False, 'row_3_col_1': False, 'row_3_col_0': False, 'row_3_col_9': False, 'row_3_col_8': False, 'row_5_col_19': False, 'row_5_col_18': False, 'row_5_col_11': False, 'row_5_col_10': False, 'row_5_col_13': False, 'row_5_col_12': False, 'row_5_col_15': False, 'row_5_col_14': False, 'row_5_col_17': False, 'row_5_col_16': False}

答案 1 :(得分:0)

您可以创建一个结构来保存复选框ID,并添加一个按钮以一次检索所有数据。这样可以轻松访问哪些盒子已经过检查,哪些盒子没有。这样您就可以检索任何您喜欢的结构中的数据,例如:

import wx

class MainPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        days=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
        self.boxes=[]
        for row in range(7):
            row_sizer = wx.BoxSizer(wx.HORIZONTAL)
            day = days[row]
            for col in range(24):
                name_of_checkbox = "{day}_{hour}".format(day=day, hour=col)
                self.checkbox = wx.CheckBox(self, name=name_of_checkbox)
                row_sizer.Add(self.checkbox, 0, wx.ALL, 5)
                self.boxes.append(self.checkbox)
            main_sizer.Add(row_sizer)
        button = wx.Button(self,-1,"Retrieve Data")
        main_sizer.Add(button)
        self.Bind(wx.EVT_CHECKBOX, self.OnChecked)
        self.Bind(wx.EVT_BUTTON, self.OnGetData)
        self.SetSizer(main_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

class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Hours and days', size=(850, 400))
        panel = MainPanel(self)
        self.Show()


if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
app.MainLoop()