Вы были действительно близко.Только две детали отсутствовали.
1 - Вы вызываете метод page1sel
из class BookTest
через экземпляр класса, который вы создаете в class MainPage
.Это означает связывание следующим образом:
page1Button.Bind(wx.EVT_BUTTON,book.page1sel)
2 - метод page1sel
должен получить event
от Bind
.Таким образом, он должен быть определен как:
def page1sel(self, event):
То же самое относится к page2sel
, что (на мой взгляд) должен быть метод class BookTest
.
Код:
import wx
### SIMPLEBOOK TEST
class MainPage (wx.Frame):
def __init__ (self,parent):
wx.Frame.__init__ ( self, None, 1, title = "NOTEBOOK", pos= wx.DefaultPosition, size = wx.Size( 320,400 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
buttonSizer = wx.BoxSizer(wx.VERTICAL)
pagesSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(buttonSizer,1,wx.EXPAND,0)
mainSizer.Add(pagesSizer,1,wx.EXPAND,0)
page1Button = wx.Button(self,wx.ID_ANY,"Page 1",wx.DefaultPosition,wx.DefaultSize,0)
page2Button = wx.Button(self,wx.ID_ANY,"Page 2",wx.DefaultPosition,wx.DefaultSize,0)
buttonSizer.Add(page1Button,1,wx.ALL|wx.EXPAND,0)
buttonSizer.Add(page2Button,1,wx.ALL|wx.EXPAND,0)
book = BookTest(self)
pagesSizer.Add(book,1,wx.EXPAND|wx.ALL,2)
self.SetSizer(mainSizer)
self.Layout()
###########################################################
# My attempts to bind the page selection to the buttons.
page1Button.Bind(wx.EVT_BUTTON,book.page1sel)
page2Button.Bind(wx.EVT_BUTTON,book.page2sel)
###########################################################
class BookTest (wx.Simplebook):
def __init__(self, parent):
wx.Simplebook.__init__(self, parent=parent)
blankpage=Blankpage(self)
page1=Page1(self)
page2=Page2(self)
self.AddPage(blankpage,"")
self.AddPage(page1,"")
self.AddPage(page2,"")
#### Here are the attempts to change page, both in a nested def and standalone.
def page1sel(self, event):
self.ChangeSelection(1)
def page2sel(self, event):
self.ChangeSelection(2)
class Blankpage (wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self,parent=parent)
sizer = wx.BoxSizer(wx.VERTICAL)
self.Show()
class Page1 (wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self,parent=parent)
sizer = wx.BoxSizer(wx.VERTICAL)
t=wx.StaticText(self,-1,"THIS IS PAGE 1")
sizer.Add(t,1,wx.EXPAND,0)
self.Show()
class Page2 (wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self, parent=parent)
sizer = wx.BoxSizer(wx.VERTICAL)
t=wx.StaticText(self,-1,"THIS IS PAGE 2")
sizer.Add(t,1,wx.EXPAND,0)
if __name__ == '__main__':
app = wx.App()
frm = MainPage(None)
frm.Centre()
frm.Show()
app.MainLoop()