【问题标题】:How to return selected check boxes using wxPython?如何使用 wxPython 返回选中的复选框?
【发布时间】:2013-07-09 04:11:58
【问题描述】:

我想执行以下任务但没有到达:

1] 在“OnApply”下获取选中的选项

2] 一旦我检查了几个选项,那么“选择”或“取消全选”将不会选择/取消选择那些未手动选择/选择的选项?

我是否需要为所有复选框选项编制索引才能执行上述任务?

任何帮助实现这一点将非常感激。如果不清楚,请告诉我。

import wx

class MyCheckBox(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, 'Checking Options', size=(470, 400))
        panel = wx.Panel(self, -1)

        self.cb = wx.CheckBox(panel, -1, '', (120, 75))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (200, 75))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (278, 75))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (356, 75))
        self.cb.SetValue(False)

        self.cb = wx.CheckBox(panel, -1, '', (120, 105))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (200, 105))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (278, 105))
        self.cb.SetValue(False)
        self.cb = wx.CheckBox(panel, -1, '', (356, 105))
        self.cb.SetValue(False)


        wx.StaticText(panel, -1, "Send output to File", (70, 255))
        self.cb = wx.CheckBox(panel, -1, '', (50, 255))
        self.cb.SetValue(True)

        wx.EVT_CHECKBOX(self, self.cb.GetId(), self.ShowTitle)

        self.btnSelect = wx.Button(panel, label="Select All", pos=(45, 295))
        self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id = self.btnSelect.GetId())

        self.btnUnSelectAll = wx.Button(panel, label="Unselect All*", pos=(173, 295))
        self.Bind(wx.EVT_BUTTON, self.OnUnSelectAll, id = self.btnUnSelectAll.GetId())

        self.btnApply = wx.Button(panel, label="Apply/Close", pos=(305, 295))
        self.Bind(wx.EVT_BUTTON, self.OnApply, id = self.btnApply.GetId())

        wx.StaticText(panel, -1, "* Note: 'Unselect All' button will not unselect storms that" '\n'
                  "   have already determined", (20, 350))

        self.Show()
        self.Centre()

    def ShowTitle(self, event):
        if self.cb.GetValue():
            self.SetTitle('checkbox.py')
        else: self.SetTitle('')

    def OnSelectAll(self, event):
        self.cb.SetValue(True)

    def OnUnSelectAll(self, event):
        pass

    def OnApply(self, event):
        selection = self.cb.GetValue()


app = wx.App(0)
MyCheckBox(None, -1, 'checkbox.py')
app.MainLoop()

【问题讨论】:

    标签: python-2.7 wxpython


    【解决方案1】:

    保存复选框以供以后使用。我在下面的代码中使用了self.cb_list

    import wx
    
    class MyCheckBox(wx.Frame):
        def __init__(self, parent, id, title):
            wx.Frame.__init__(self, parent, id, 'Checking Options', size=(470, 400))
            panel = wx.Panel(self, -1)
    
            self.cb_list = []
            for pos in [(120,75), (200,75), (278,75), (356,75), (120,105), (200,105), (278,105), (356,105)]:
                cb = wx.CheckBox(panel, -1, '', pos)
                cb.SetValue(False)
                self.cb_list.append(cb)
    
            wx.StaticText(panel, -1, "Send output to File", (70, 255))
            self.cb = wx.CheckBox(panel, -1, '', (50, 255))
            self.cb.SetValue(True)
    
            wx.EVT_CHECKBOX(self, self.cb.GetId(), self.ShowTitle)
    
            self.btnSelect = wx.Button(panel, label="Select All", pos=(45, 295))
            self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id = self.btnSelect.GetId())
    
            self.btnUnSelectAll = wx.Button(panel, label="Unselect All*", pos=(173, 295))
            self.Bind(wx.EVT_BUTTON, self.OnUnSelectAll, id = self.btnUnSelectAll.GetId())
    
            self.btnApply = wx.Button(panel, label="Apply/Close", pos=(305, 295))
            self.Bind(wx.EVT_BUTTON, self.OnApply, id = self.btnApply.GetId())
    
            wx.StaticText(panel, -1, "* Note: 'Unselect All' button will not unselect storms that" '\n'
                      "   have already determined", (20, 350))
    
            self.Show()
            self.Centre()
    
        def ShowTitle(self, event):
            if self.cb.GetValue():
                self.SetTitle('checkbox.py')
            else: self.SetTitle('')
    
        def OnSelectAll(self, event):
            for cb in self.cb_list:
                cb.SetValue(True)
    
        def OnUnSelectAll(self, event):
            for cb in self.cb_list:
                cb.SetValue(False)
    
        def OnApply(self, event):
            selection = self.cb.GetValue()
            for i, cb in enumerate(self.cb_list):
                if cb.GetValue():
                    print('{} selected'.format(i))
    
    
    app = wx.App(0)
    MyCheckBox(None, -1, 'checkbox.py')
    app.MainLoop()
    

    【讨论】:

    • 谢谢。它的主要任务是返回选中的框、全选和取消全选,除了取消全选仅在第一个实例中未选中的那些。
    • @Ibe,我不明白你的意思。 (我不擅长英语读/写。)。自定义 self.cb_list 将完成您想要的任务。
    • 我需要添加一个字典来跟踪检查了哪些选项。这可能会让我只取消选择第一次没有选择的那些。
    猜你喜欢
    • 2011-08-15
    • 2017-12-17
    • 2018-08-07
    • 1970-01-01
    • 2015-09-14
    • 2020-12-19
    • 1970-01-01
    • 2014-11-24
    • 2020-01-21
    相关资源
    最近更新 更多