【问题标题】:BoxSizer in Frame and Panel框架和面板中的 BoxSizer
【发布时间】:2014-03-20 03:10:16
【问题描述】:

当我像这样创建 BoxSizer 时:

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                      "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        self.panel=wx.Panel(self,size=(800,600))
        # create BoxSizer and fill it with elements

它有效。 但是当我这样做时:

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                      "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        panelThree(self)

class panelThree(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent,size=(800,600))
        self.panel=wx.Panel(self,size=(800,600))
        # create BoxSizer and fill it with elements

然后出了点问题:所有元素都位于左上角并且它们相互重叠。当我想在我的类 panelThree 中使用 BoxSizer 时,我必须如何使用它? 我只是从这里举了一个例子:http://wiki.wxpython.org/BoxSizerTutorial

【问题讨论】:

    标签: python wxpython boxsizer


    【解决方案1】:

    问题很可能是您没有将以下小部件添加到 sizer:self.panel。如果你不将它添加到 sizer,那么它会弄乱你的布局。就个人而言,我认为您甚至不需要面板内的面板。删除该行将解决问题:

    import wx
    
    class MyForm(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
            panelThree(self)
    
    class panelThree(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent=parent,size=(800,600))
            self.panel=wx.Panel(self,size=(800,600))
            # create BoxSizer and fill it with elements
            sizer = wx.BoxSizer(wx.VERTICAL)
    
            for item in range(10):
                btn = wx.Button(self, label="Button %s" % item)
                sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
    
            self.SetSizer(sizer)
    
    #----------------------------------------------------------------------
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MyForm()
        frame.Show()
        app.MainLoop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多