wxPython wx.Notebook 中选项卡之间的事件
Event between tabs in wxPython's wx.Notebook
我正在尝试使用 wxPython 的 wx.Notebook
创建两个选项卡;但是,如果按钮和列表框位于不同的选项卡中,我很难理解应该将 Bind()
放在哪里。
我的代码如下所示:它有 class TabOne
和 TabTwo
,两者都是 wx.Panel
。 class enrollment
是使用 TabOne
和 TabTwo
作为面板的 wx.Frame
。
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()
只是想知道我是否想为 TabOne
中的 btn
添加 Bind()
以便更新 TabTwo
中的 ListBox
,我应该在哪里添加它的定义?我现在不知所措。谢谢你们。
您可以通过不同的方式来组织它。 按钮的绑定是一回事,您在处理程序中执行的操作是另一回事。我的方法是让 enrollment
class 处理绑定和操作,因为它知道这两个选项卡。您不希望在 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()
我正在尝试使用 wxPython 的 wx.Notebook
创建两个选项卡;但是,如果按钮和列表框位于不同的选项卡中,我很难理解应该将 Bind()
放在哪里。
我的代码如下所示:它有 class TabOne
和 TabTwo
,两者都是 wx.Panel
。 class enrollment
是使用 TabOne
和 TabTwo
作为面板的 wx.Frame
。
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()
只是想知道我是否想为 TabOne
中的 btn
添加 Bind()
以便更新 TabTwo
中的 ListBox
,我应该在哪里添加它的定义?我现在不知所措。谢谢你们。
您可以通过不同的方式来组织它。 按钮的绑定是一回事,您在处理程序中执行的操作是另一回事。我的方法是让 enrollment
class 处理绑定和操作,因为它知道这两个选项卡。您不希望在 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()