2016-08-02 27 views
1

Ich habe versucht, mit WxFrameBuilder zu erstellen, um Unterklassen von Frames zu erstellen, so dass ich eine Unterklasse aufrufen kann, die eine Menge des Hauptrahmens erbt aber einen Teil des Rahmens durch Ersetzen eines Bereichs überschreibt. Hier ist der WxFormBuilder generierte Testcode.wxFormBuilder und Frame-Subklassen

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 

Hier ist der Code, den ich verwende, um die Frames anzuzeigen.

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

die TopMenü (MainMenu) funktioniert gut angezeigt, aber die SecondMenu (Untermenü) Klasse aufrufen, wie oben gibt den folgenden Fehler.

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() bekam ein unerwartetes Schlüsselwort Argument 'id'

Dies ist eine vereinfachte neu erstellt Fehler. Kann jemand helfen?

Antwort

1

MainMenu.__init__ ist wie folgt definiert:

def __init__(self, parent): 

Aber man es so nennen:

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) 

das Problem?