Как связать выбор страницы wx.simplebook с внешними кнопками? - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь привязать функцию .ChangeSelection () простой книги к кнопкам, которые не находятся в книге, но находятся в том же фрейме.

Пример кода в его текущей форме - это просто наборрамка с кнопками слева для страниц, а сама книга показана справа.в данный момент кнопки LHS не связаны, и книга RHS wx.simplebook отображает пустую страницу «0».

Мне бы хотелось, чтобы при нажатии кнопки отображали соответствующую страницу, но я не могу найтиПодходящий пример простых книг в Интернете, чтобы узнать, что в этом формате.

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,BookTest.page1sel())
        #page2Button.Bind(wx.EVT_BUTTON,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.ChangeSelection(1)

def page2sel():
    BookTest.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()

Спасибо, Sundown

1 Ответ

1 голос
/ 14 июня 2019

Вы были действительно близко.Только две детали отсутствовали.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...