0

このような 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

4

1 に答える 1

0

この問題は、次のウィジェットをサイザーに追加していない可能性が最も高いです: self.panel. サイザーに追加しないと、レイアウトが台無しになります。個人的には、パネルの中にパネルさえ必要ないと思います。その行を削除すると、問題が修正されます。

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()
于 2014-03-19T19:10:16.773 に答える