Inheritance wx.Frame中的第二个wx.Frame-混乱的布局

Inheritance wx.Frame中的第二个wx.Frame-混乱的布局,inheritance,wxpython,frame,Inheritance,Wxpython,Frame,我有一个wx.python程序,它在一个名为Main的类中使用wx.Frame。在这一点上,我有一个带有首选项的菜单栏,其想法是单击此菜单打开另一个wx.Frame用于配置框等。然而问题是,尽管我认为编码是正确的,但wx.Frame小部件和BoxSizer布局并没有正确显示,并且都被塞进了左上角,相互重叠 类似地,我发现主类包含一个名为openFile的方法。我在我的Preferences类中调用它,我尝试使用类继承,但我认为我没有正确地使用它,类Mainwx.Frame,类Preference

我有一个wx.python程序,它在一个名为Main的类中使用wx.Frame。在这一点上,我有一个带有首选项的菜单栏,其想法是单击此菜单打开另一个wx.Frame用于配置框等。然而问题是,尽管我认为编码是正确的,但wx.Frame小部件和BoxSizer布局并没有正确显示,并且都被塞进了左上角,相互重叠

类似地,我发现主类包含一个名为openFile的方法。我在我的Preferences类中调用它,我尝试使用类继承,但我认为我没有正确地使用它,类Mainwx.Frame,类PreferencesMain

框架子项,父项上方没有正确显示,布局都被填满了。 我认为我的类继承是错误的: 谢谢

形象

在prefWindow类中,问题是在sizer布局之前调用self.show。您需要在sizer layout之后调用self.show

class prefWindow(Main):

    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow)

        #self.Show()        
        self.SetTitle('Preferences')
        self.SetSize((280, 300))

        panelPref = wx.Panel(self)
        panelPref.SetBackgroundColour('#ededed')
        vBox = wx.BoxSizer(wx.VERTICAL)
        hBox1 = wx.BoxSizer(wx.HORIZONTAL)

        hBox1.Add(wx.StaticText(panelPref, label="Tools Directory:"), flag=wx.TOP, border=3)
        self.toolDir = wx.TextCtrl(panelPref, style=wx.TE_READONLY|wx.TE_RICH)
        hBox1.Add(self.toolDir, 0, flag=wx.LEFT, border=10)
        browseBtn = wx.Button(panelPref, -1, "Browse")
        self.Bind(wx.EVT_BUTTON, Main.openFile, browseBtn)
        hBox1.Add(browseBtn, 0, flag=wx.LEFT, border=10)
        vBox.Add(hBox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border=10)

        vBox.Add((-1, 5))

        panelPref.SetSizer(vBox)
        self.Show() ## call Show() here

或者做一些类似Layout或SendSizeEvent的操作来触发sizer进行布局。谢谢Deepa,你完全正确,花了很多时间寻找这个问题!新手失误!
class prefWindow(Main):

    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow)

        #self.Show()        
        self.SetTitle('Preferences')
        self.SetSize((280, 300))

        panelPref = wx.Panel(self)
        panelPref.SetBackgroundColour('#ededed')
        vBox = wx.BoxSizer(wx.VERTICAL)
        hBox1 = wx.BoxSizer(wx.HORIZONTAL)

        hBox1.Add(wx.StaticText(panelPref, label="Tools Directory:"), flag=wx.TOP, border=3)
        self.toolDir = wx.TextCtrl(panelPref, style=wx.TE_READONLY|wx.TE_RICH)
        hBox1.Add(self.toolDir, 0, flag=wx.LEFT, border=10)
        browseBtn = wx.Button(panelPref, -1, "Browse")
        self.Bind(wx.EVT_BUTTON, Main.openFile, browseBtn)
        hBox1.Add(browseBtn, 0, flag=wx.LEFT, border=10)
        vBox.Add(hBox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, border=10)

        vBox.Add((-1, 5))

        panelPref.SetSizer(vBox)
        self.Show() ## call Show() here