您好,我正在尝试创建一个开关按钮和两个圆圈,一个圆圈是白色,另一个圆圈是红色,圆圈代表一个LED,当我按下时,我想看到红色圆圈,然后再次按下,看到白色。我已经编写了这段代码,但是我不会在两个面板上使用它并调用on switch panel函数。还有其他方法吗?我的意思是如果我可以将on按钮与红色圆圈绑定在一起,并隐藏白色,何时我再次按下相同的按钮或关闭标签的另一个按钮以隐藏红色并显示白色吗?
这是代码:
`import wx
class PanelOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
button =wx.Button(self, label="Turn ON", pos=(160, 130))
button.Bind(wx.EVT_BUTTON, parent.onSwitchPanels)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.Clear()
dc.SetBrush(wx.Brush('White'))
dc.DrawCircle(200, 230, 35)
class PanelTwo(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
button =wx.Button(self, label="Turn OFF", pos=(160, 130))
button.Bind(wx.EVT_BUTTON, parent.onSwitchPanels)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.Clear()
dc.SetBrush(wx.Brush('Red'))
dc.DrawCircle(200, 230, 35)
class MainForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,"LED" )
self.panel_one = PanelOne(self)
self.panel_two = PanelTwo(self)
self.panel_two.Hide()
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.panel_one, 1, wx.EXPAND)
self.sizer.Add(self.panel_two, 1, wx.EXPAND)
self.SetSizer(self.sizer)
def onSwitchPanels(self, event):
if self.panel_one.IsShown():
self.SetTitle("LED")
self.panel_one.Hide()
self.panel_two.Show()
else:
self.SetTitle("LED")
self.panel_one.Show()
self.panel_two.Hide()
self.Layout()
if __name__ == "__main__":
app = wx.App(False)
frame = MainForm()
frame.Show()
app.MainLoop()`
这是使用单个面板更改相同按钮和相同圆圈的一种方法。
import wx
class PanelOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
self.state = [('White', 'Turn ON'), ('Red', 'Turn OFF')]
self.button = wx.Button(self, label=self.state[0][1], pos=(160, 130))
self.button.Bind(wx.EVT_BUTTON, self.switch_state)
self.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.Clear()
dc.SetBrush(wx.Brush(self.state[0][0]))
dc.DrawCircle(200, 230, 35)
def switch_state(self, event):
self.state.append(self.state.pop(0))
self.button.SetLabel(label=self.state[0][1])
self.Refresh()
class MainForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "LED")
self.panel_one = PanelOne(self)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.panel_one, 1, wx.EXPAND)
self.SetSizer(self.sizer)
if __name__ == "__main__":
app = wx.App(False)
frame = MainForm()
frame.Show()
app.MainLoop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句