wxPython - 通过按钮更改面板
wxPython - change panel by button
我想用 2 个面板编写简单的代码。简单 "Hello" 和旁边的按钮。按钮将面板更改为 panel_2,文本 "Panel 2" 和旁边的按钮。我不知道我怎样才能做到这一点。有我的代码:
import wx
class Glowne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
self.SetSize((800,600))
tekst = 'HELLO'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
btn = wx.Button(self, -1, "Change panel", (345, 100))
self.Bind(wx.EVT_BUTTON, Program.zmiana, btn)
class Glowne1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
tekst = 'Panel 2'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
btn = wx.Button(self, -1, "Change panel", (345, 100))
#self.Bind(wx.EVT_BUTTON, frame.zmiana, btn)
class Program(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,'Program')
panel_one = Glowne(self)
self.panel_two = Glowne1(self)
self.panel_two.Hide()
self.SetSize((800,600))
self.Centre()
def zmiana(self):
self.panel_one.Hide()
self.panel_two.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = Program()
frame.Show()
app.MainLoop()
感谢您的帮助。我阅读了 this tutorial,但我无法在我的简单代码中使用它。
程序框架需要添加一个 sizer,面板需要自己添加到 btn 以便可以从 class 程序访问它们,绑定到 class 程序内的按钮。
这是一个例子
import wx
class Glowne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
self.SetSize((800, 600))
tekst = 'HELLO'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
self.btn = wx.Button(self, -1, "Change panel", (345, 100))
class Glowne1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
tekst = 'Panel 2'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
self.btn = wx.Button(self, -1, "Change panel", (345, 100))
class Program(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, 'Program')
sizer = wx.BoxSizer()
self.SetSizer(sizer)
self.panel_one = Glowne(self)
sizer.Add(self.panel_one, 1, wx.EXPAND)
self.panel_one.btn.Bind(wx.EVT_BUTTON, self.show_panel_two)
self.panel_two = Glowne1(self)
sizer.Add(self.panel_two, 1, wx.EXPAND)
self.panel_two.btn.Bind(wx.EVT_BUTTON, self.show_panel_one)
self.panel_two.Hide()
self.SetSize((800, 600))
self.Centre()
def show_panel_one(self, event):
self.panel_one.Show()
self.panel_two.Hide()
self.Layout()
def show_panel_two(self, event):
self.panel_two.Show()
self.panel_one.Hide()
self.Layout()
if __name__ == "__main__":
app = wx.App(False)
frame = Program()
frame.Show()
app.MainLoop()
我想用 2 个面板编写简单的代码。简单 "Hello" 和旁边的按钮。按钮将面板更改为 panel_2,文本 "Panel 2" 和旁边的按钮。我不知道我怎样才能做到这一点。有我的代码:
import wx
class Glowne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
self.SetSize((800,600))
tekst = 'HELLO'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
btn = wx.Button(self, -1, "Change panel", (345, 100))
self.Bind(wx.EVT_BUTTON, Program.zmiana, btn)
class Glowne1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
tekst = 'Panel 2'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
btn = wx.Button(self, -1, "Change panel", (345, 100))
#self.Bind(wx.EVT_BUTTON, frame.zmiana, btn)
class Program(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,'Program')
panel_one = Glowne(self)
self.panel_two = Glowne1(self)
self.panel_two.Hide()
self.SetSize((800,600))
self.Centre()
def zmiana(self):
self.panel_one.Hide()
self.panel_two.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = Program()
frame.Show()
app.MainLoop()
感谢您的帮助。我阅读了 this tutorial,但我无法在我的简单代码中使用它。
程序框架需要添加一个 sizer,面板需要自己添加到 btn 以便可以从 class 程序访问它们,绑定到 class 程序内的按钮。
这是一个例子
import wx
class Glowne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent)
self.SetSize((800, 600))
tekst = 'HELLO'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
self.btn = wx.Button(self, -1, "Change panel", (345, 100))
class Glowne1(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
tekst = 'Panel 2'
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)
self.btn = wx.Button(self, -1, "Change panel", (345, 100))
class Program(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, 'Program')
sizer = wx.BoxSizer()
self.SetSizer(sizer)
self.panel_one = Glowne(self)
sizer.Add(self.panel_one, 1, wx.EXPAND)
self.panel_one.btn.Bind(wx.EVT_BUTTON, self.show_panel_two)
self.panel_two = Glowne1(self)
sizer.Add(self.panel_two, 1, wx.EXPAND)
self.panel_two.btn.Bind(wx.EVT_BUTTON, self.show_panel_one)
self.panel_two.Hide()
self.SetSize((800, 600))
self.Centre()
def show_panel_one(self, event):
self.panel_one.Show()
self.panel_two.Hide()
self.Layout()
def show_panel_two(self, event):
self.panel_two.Show()
self.panel_one.Hide()
self.Layout()
if __name__ == "__main__":
app = wx.App(False)
frame = Program()
frame.Show()
app.MainLoop()