有没有办法构建一个切换按钮数组并跟踪所有已单击的按钮?
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()
根据评论更改前景色图像:
我正在使用 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()
根据评论更改前景色图像: