有没有办法构建一个切换按钮数组并跟踪所有已单击的按钮?

Is there a way to build an array of toggle buttons and track all buttons that have been clicked?

我正在使用 wxPython 构建一个由大量切换按钮(25 x 25)组成的 GUI。我使用 GridSizer 和 AddMany 来创建切换按钮网格。我无法使用 AddMany 语法将单个按钮分配给变量,因此,我不确定如何跟踪单击的切换按钮

这是我第一次尝试使用wxpython 库构建应用程序,我不是很熟悉它更强大的功能。我过去的项目只涉及几个按钮,不需要一大堆按钮

gs = wx.GridSizer(12, 12, 4, 4)

gs.AddMany( [(wx.ToggleButton(self, label='Cls'), 2, wx.EXPAND),
            (wx.ToggleButton(self, label='Bck'), 2, wx.EXPAND),
            (wx.ToggleButton(self, label='Close'), 2, wx.EXPAND),
            (wx.ToggleButton(self, label='7'), 2, wx.EXPAND),
#lots of buttons
            (wx.ToggleButton(self, label='8'), 0, wx.EXPAND),
            (wx.ToggleButton(self, label='9'), 0, wx.EXPAND)])

我无法在互联网上找到好的建议或示例,我希望 wxpython 的一些专家可以在这里帮助我

您可以使用 label 或给每个按钮一个 name,同时将它们的当前值存储在 dictionary.
中 例如:

import wx

class Example(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)
        self.InitUI()

    def InitUI(self):
        panel = wx.Panel(self)
        self.button_dict = {'Info':False,'Error':False,'Question':False}
        hbox = wx.BoxSizer()
        sizer = wx.GridSizer(2, 2, 2, 2)
        sizer.AddMany([wx.ToggleButton(panel, label='Info'), wx.ToggleButton(panel, label='Error'), wx.ToggleButton(panel, label='Question')])
        hbox.Add(sizer, 0, wx.ALL, 15)
        panel.SetSizer(hbox)
        self.Bind(wx.EVT_TOGGLEBUTTON, self.ShowButton)
        self.SetSize((300, 200))
        self.SetTitle('Buttons')
        self.Centre()
        self.Show(True)

    def ShowButton(self, event):
        x = event.GetEventObject()
        lab = x.GetLabel()
        print("Button pressed",lab)
        if self.button_dict[lab]:
            self.button_dict[lab] = False
        else:
            self.button_dict[lab] = True
        print(self.button_dict)

def main():
    ex = wx.App()
    Example(None)
    ex.MainLoop()

if __name__ == '__main__':
    main()

根据评论更改前景色图像: