使用 wx.Simplebook 给我退出代码 3221225477

using a wx.Simplebook giving me exit code 3221225477

我正在尝试使用 wx.Simplebook,据我所知,我基本上已经复制了 python 演示,但显然缺少一些重要的东西。

这个例子左边应该是wx.Frame with two wx.Buttons,右边是wx.Simplebook。这两个按钮应该在书页之间切换。

import wx


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,0)
        buttonSizer.Add(page2Button,1,0)
        book = MainPage.BookTest(self)
        pagesSizer.Add(book,1,wx.EXPAND)
        self.SetSizer(mainSizer)
        self.Layout()

    class BookTest (wx.Simplebook):
        def __init__(self,parent):
            wx.Simplebook.__init__(self,parent)
            page1=MainPage.Page1(self)
            page2=MainPage.Page2(self)
            self.AddPage(page1,"")
            self.AddPage(page2,"")

    class Page1 (wx.Panel):
        def __init__(self,parent):
            wx.Panel.__init__(self)
            sizer = wx.BoxSizer(wx.VERTICAL)
            t=wx.StaticText(self,-1,"THIS IS PAGE 1")
            sizer.Add(t,1,wx.EXPAND,0)      

    class Page2 (wx.Panel):
        def __init__(self,parent):
            wx.Panel.__init__(self)
            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()

一半时间构建暂停,没有任何显示(尽管我收到 'Finished in 2.0 seconds' 消息),另一半时间我收到错误代码 3221225477。

如果你#行pagesSizer.Add(book,1,wx.EXPAND),框架按计划打开,但显然没有简单的书。 我哪里做错了?

谢谢,

日落

欢迎使用 Whosebug。

您的代码只缺少一些细节。首先,类 的缩进是错误的。它们都应该从第一列开始。该代码表明(至少对我而言)您正在考虑 BookTestPage1Page2 作为 MainPage 的子 类。但这不是正确的思考方式。它们都是独立的 类 并且您将在 MainPage 中使用 BookTestBookTest 的实例将使用 Page1 的实例和 [=13 的实例=].

更改此项会导致将行 book = MainPage.BookTest(self) 更改为 book = BookTest(self)

第二个问题是您需要跟踪小部件的 parent/child 关系,因为这对正确显示它们有很大帮助。因此,在BookTest and Page1 and Page2.[=28中启动wx.Simplebook and wx.Panel widget时需要传递parent参数=]

这是代码,

import wx


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,0)
        buttonSizer.Add(page2Button,1,0)
        book = BookTest(self)
        pagesSizer.Add(book,1,wx.EXPAND)
        self.SetSizer(mainSizer)
        self.Layout()

class BookTest (wx.Simplebook):
    def __init__(self, parent):
        wx.Simplebook.__init__(self, parent=parent)
        page1=Page1(self)
        page2=Page2(self)
        self.AddPage(page1,"")
        self.AddPage(page2,"")

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)      

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()