我正在尝试使用wxPython的wx.Notebook
创建两个选项卡;但是,如果按钮和ListBox位于不同的选项卡中,我很难理解我应该放置Bind()
的位置。
以下是我的代码的外观:它包含TabOne
类,TabTwo
,wx.Panel
。班级enrollment
是wx.Frame
,使用TabOne
和TabTwo
作为小组。
class TabOne(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self, parent)
btn = wx.Button(self, 1, "Add", (120,110))
class TabTwo(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self, parent)
lst = wx.ListBox(self, 1, (40,40))
class enrollment(wx.Frame):
def __init__(self, *args, **kargs):
super(enrollment, self).__init__(*args, **kargs)
panel = wx.Panel(self)
nb = wx.Notebook(panel)
tab1 = TabOne(nb)
tab2 = TabTwo(nb)
nb.AddPage(tab1, "Button")
nb.AddPage(tab2, "ListBox")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
panel.SetSizer(sizer)
self.Show(True)
def main():
app = wx.App()
enrollment(None)
app.MainLoop()
if __name__ = '__main__':
main()
想知道我是否要在Bind()
中为btn
添加TabOne
,以便更新ListBox
中的TabTwo
我应该为它添加定义吗?我此刻不知所措。多谢你们。
答案 0 :(得分:1)
您可以通过不同的方式进行整理。 按钮的绑定是一回事,您在处理程序中执行的操作是另一个。我的方法是让enrollment
类处理绑定和操作,因为它知道两个选项卡。您不希望在TabOne和TabTwo之间创建依赖关系。
class TabOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.btn = wx.Button(self, 1, "Add", (120,110))
def BindButton(self, handler):
# let users of TabOne to register their button handler
self.btn.Bind(wx.EVT_BUTTON, handler)
class TabTwo(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self, parent)
self.lst = wx.ListBox(self, 1, (40,40))
def InformButtonClicked(self):
# signal to TabTwo about the button click
self.lst.Append("Item")
class enrollment(wx.Frame):
def __init__(self, *args, **kargs):
super(enrollment, self).__init__(*args, **kargs)
panel = wx.Panel(self)
nb = wx.Notebook(panel)
self.tab1 = TabOne(nb)
self.tab2 = TabTwo(nb)
# register your button handler
self.tab1.BindButton(self.button_handler)
nb.AddPage(self.tab1, "Button")
nb.AddPage(self.tab2, "ListBox")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
panel.SetSizer(sizer)
self.Show(True)
def button_handler(self, evt):
# this method gets called when the button is clicked
self.tab2.InformButtonClicked()