如何在wxPython中记录多个复选框?

0 投票
1 回答
1086 浏览
提问于 2025-04-18 14:20

我想让我的程序记录用户是否点击了复选框,这样我就知道要删除哪些东西。问题是我并不知道所有复选框的变量名,所以不能直接用 GetValue()。在下面的代码中,我有一组固定的东西,但在实际程序中,它是从文件中读取用户信息的。

import wx
class supper(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,'Delete Stocks',size=(300,300))
        nexus=wx.Panel(self)
        again=30
        newfp='GOOG AAPL'.split()
        #Need to see if user checked box and which one
        for i in newfp:
            self.checkbox=(wx.CheckBox(nexus,-1,i,(30,again),(160,-1)))
            self.Bind(wx.EVT_CHECKBOX, self.lol,self.checkbox)
            again+=30
        anothercancel=wx.Button(nexus,label='Cancel',pos=(50,250),size=(60,40))
        self.Bind(wx.EVT_BUTTON,self.acancel,anothercancel)
        anotherok=wx.Button(nexus,label='OK',pos=(200,250),size=(60,40))
        self.Bind(wx.EVT_BUTTON,self.okalready,anotherok)
    def acancel(self,event):
        self.Destroy()
    #Couldn't figure out how to see what check was clicked
    def okalready(self,event):
        for i in newfp:
            valuechecker=self.checkbox.GetValue()
            if self.checkbox.Get()==True:
                print 'You clicked this %s one'%i
        self.Destroy()
    def lol(self,event):
        pass
if __name__=='__main__':
    ok=wx.PySimpleApp()
    people=supper(parent=None,id=-1)
    people.Show()
    ok.MainLoop()

这不是完整的代码,所以这里可能有一些变量没有定义。提前谢谢大家!期待你们的回答!

1 个回答

2

只需把它们放在一个列表里...

self.checkboxes = []
for i in newfp:
        self.checkboxes.append(wx.CheckBox(nexus,-1,i,(30,again),(160,-1)))
        self.checkboxes[-1].Bind(wx.EVT_CHECKBOX, self.lol)
        again+=30

然后,当你点击确定时,可以用这个来检查哪些选框被选中了

def okalready(self,event):
    for i,cb in enumerate(self.checkboxes):
       print "CB:%d = %s"%(i,cb.GetValue())
    print "Checked:",[cb.GetLabel() for cb in self.checkboxes if cb.GetValue()]
    self.Destroy()

撰写回答