wxFormBuilder และคลาสย่อยของเฟรม

ฉันพยายามทำงานกับ wxFrameBuilder เพื่อสร้างคลาสย่อยของเฟรม เพื่อให้ฉันสามารถเรียกคลาสย่อยที่สืบทอดเฟรมหลักจำนวนมาก แต่เขียนทับส่วนหนึ่งของเฟรมโดยการเปลี่ยนพาเนล นี่คือรหัสทดสอบที่สร้างโดย wxFormBuilder

    class MainMenu ( wx.Frame ):

    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_ACTIVECAPTION ) )

        bSizer59 = wx.BoxSizer( wx.VERTICAL )

        self.m_panel53 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        bSizer60 = wx.BoxSizer( wx.HORIZONTAL )

        self.m_staticText18 = wx.StaticText( self.m_panel53, wx.ID_ANY, u"Menu Title", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText18.Wrap( -1 )
        self.m_staticText18.SetFont( wx.Font( 20, 70, 90, 90, False, wx.EmptyString ) )
        self.m_staticText18.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_ACTIVECAPTION ) )

        bSizer60.Add( self.m_staticText18, 0, wx.ALL, 5 )


        self.m_panel53.SetSizer( bSizer60 )
        self.m_panel53.Layout()
        bSizer60.Fit( self.m_panel53 )
        bSizer59.Add( self.m_panel53, 1, wx.EXPAND |wx.ALL, 5 )

        self.m_panel55 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        bSizer61 = wx.BoxSizer( wx.HORIZONTAL )

        self.m_button22 = wx.Button( self.m_panel55, wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button22, 0, wx.ALL, 5 )


        bSizer61.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )

        self.m_button23 = wx.Button( self.m_panel55, wx.ID_ANY, u"2", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button23, 0, wx.ALL, 5 )


        bSizer61.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )

        self.m_button24 = wx.Button( self.m_panel55, wx.ID_ANY, u"3", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button24, 0, wx.ALL, 5 )


        self.m_panel55.SetSizer( bSizer61 )
        self.m_panel55.Layout()
        bSizer61.Fit( self.m_panel55 )
        bSizer59.Add( self.m_panel55, 1, wx.EXPAND |wx.ALL, 5 )


        self.SetSizer( bSizer59 )
        self.Layout()

        self.Centre( wx.BOTH )

    def __del__( self ):
        pass


class SubMenu ( MainMenu ):

    def __init__( self, parent ):
        MainMenu.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        bSizer59 = wx.BoxSizer( wx.VERTICAL )

        self.m_panel55 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        self.m_panel55.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_ACTIVECAPTION ) )

        bSizer61 = wx.BoxSizer( wx.HORIZONTAL )

        self.m_button22 = wx.Button( self.m_panel55, wx.ID_ANY, u"one", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button22, 0, wx.ALL, 5 )


        bSizer61.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )

        self.m_button23 = wx.Button( self.m_panel55, wx.ID_ANY, u"two", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button23, 0, wx.ALL, 5 )


        bSizer61.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )

        self.m_button24 = wx.Button( self.m_panel55, wx.ID_ANY, u"three", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer61.Add( self.m_button24, 0, wx.ALL, 5 )


        self.m_panel55.SetSizer( bSizer61 )
        self.m_panel55.Layout()
        bSizer61.Fit( self.m_panel55 )
        bSizer59.Add( self.m_panel55, 1, wx.EXPAND |wx.ALL, 5 )


        self.SetSizer( bSizer59 )
        self.Layout()

        self.Centre( wx.BOTH )

    def __del__( self ):
        pass

นี่คือโค้ดที่ฉันใช้เพื่อแสดงเฟรม

import wx
from gui import *


class TopMenu(MainMenu):
    def __init__(self, parent):
        MainMenu.__init__(self, parent)

class SecondMenu(SubMenu):
    def __init__(self, parent):
        SubMenu.__init__(self, parent)


if __name__ == '__main__':
    app = wx.App(0)
    frame = SecondMenu(None)
    frame.Centre()
    frame.Show()
    app.MainLoop()

การแสดง TopMenu(MainMenu) ทำงานได้ดี แต่การเรียกคลาส SecondMenu(Submenu) ดังที่กล่าวข้างต้นทำให้เกิดข้อผิดพลาดดังต่อไปนี้

MainMenu.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

TypeError: init() ได้รับอาร์กิวเมนต์คำหลักที่ไม่คาดคิด 'id'

นี่เป็นข้อผิดพลาดที่สร้างขึ้นใหม่อย่างง่าย ใครสามารถช่วยได้บ้าง?


person Finchy70    schedule 02.08.2016    source แหล่งที่มา


คำตอบ (1)


MainMenu.__init__ ถูกกำหนดเช่นนี้:

def __init__( self, parent ):

แต่คุณกำลังเรียกมันเช่นนี้:

MainMenu.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString,
                    pos = wx.DefaultPosition, size = wx.Size( 500,300 ),
                    style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

เห็นปัญหาหรือไม่?

person RobinDunn    schedule 02.08.2016