Я пытаюсь запустить событие, когда пользователь выбирает или изменяет вкладку на ноутбуке. Вот код, который у меня есть. В классе PageOne я попытался связать wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED с функцией ChangingTest (self, evt). Кажется, что независимо от того, какое событие я пытаюсь использовать при привязке, я не могу запустить событие. Это возможно? Что мне не хватает?Нет события при выборе вкладки в записной книжке в wxPython
У меня нет проблем с нажатием кнопки и вызовом self.ChangingTest, но я хочу щелкнуть по вкладке, чтобы позвонить self.ChangingTest.
import wx
import wx.lib.inspection
class PageOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
box = wx.BoxSizer(wx.VERTICAL)
# Want the users' click on the panel tab to fire an event and
# call ChangingTest
self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.ChangingTest)
cmdClick = wx.Button(self, wx.ID_CLOSE, "Click Me")
cmdClick.Bind(wx.EVT_BUTTON, self.ChangingTest)
box.Add(cmdClick, 0, wx.ALL, 10)
def ChangingTest(self, evt):
print "ChangingTest2"
class PageTwo(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
class PageThree(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
# Here we create a panel and a notebook on the panel
p = wx.Panel(self)
nb = wx.Notebook(p)
# create the page windows as children of the notebook
page1 = PageOne(nb)
page2 = PageTwo(nb)
page3 = PageThree(nb)
# add the pages to the notebook with the label to show on the tab
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
# finally, put the notebook in a sizer for the panel to manage
# the layout
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
У меня есть рабочая версия здесь:
import wx
class PageOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
class PageTwo(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
class PageThree(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
# Here we create a panel and a notebook on the panel
p = wx.Panel(self)
nb = wx.Notebook(p)
# create the page windows as children of the notebook
page1 = PageOne(nb)
page2 = PageTwo(nb)
page3 = PageThree(nb)
# add the pages to the notebook with the label to show on the tab
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
# finally, put the notebook in a sizer for the panel to manage
# the layout
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
# bind event to notebook
nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.ChangingTest)
def ChangingTest(self, evt):
print "It worked!"
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
Спасибо за информацию. Я привязывал событие к неправильному объекту. Как только я выполнил «привязку» к ноутбуку, а не PageOne, он работал нормально. В очередной раз благодарим за помощь. –
Вот рабочая версия кода. класс MainFrame (wx.Frame): Защиту __init __ (Я): wx.Frame .__ INIT __ (самость, None, название = "Simple Notebook Пример") # Здесь мы создаем панель и ноутбук на панели р = wx.Panel (само) нб = wx.Notebook (р) # создавать окна страницы как дети ноутбука стр.1 = PageOne (нб) ... # связывают события в блокнот nb.Bind (wx.EVT_NOTEBOOK_PAGE_CHANGED, self.ChangingTest) def ChangingTest (self, evt): print «Это сработало!» –