wxpython sizer出错

时间:2011-11-06 17:59:35

标签: python wxpython

我不确定我应该如何调整尺寸,我一直在尝试使用sizer,但似乎我一直在做错事。

基本上我有这个代码:

self.button = wx.Button(self, label="Create New", pos=(25,250))

我想用它一个sizer。所以它会一直调整它的位置到窗口。初始起始位置为25,250。初始窗口的高度为400。 我希望按钮根据窗口的变化进行调整。

谢谢,如果您有任何问题或需要澄清,请发表评论。

1 个答案:

答案 0 :(得分:0)

这里有一个wxglade自动生成的代码,展示了如何使用wx.BoxSizer。 它只是一个带有面板小部件的框架。您可以使用按钮更改面板,它将完美地工作。我们的想法是,您可以为wx.Panel中的其他小部件添加:

sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)

这会使您的小部件排成一排。如果您想要另一个处置,您可以使用不同的sizer,您还可以将带有小部件的sizer添加到其他sizer。 sizer.Add()中的参数确定sizer的边框和行为。您应该检查wxPython / wxglade文档。无论如何,结构总是如下所示:

import wx

# begin wxGlade: extracode
# end wxGlade

class MyFrame1(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.CLOSE_BOX|wx.SYSTEM_MENU| wx.CAPTION
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        ------ create other widgets here ------

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        self.SetMinSize((300,200))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)
        ------ add other widgets or even sizers to the sizer here ------
        self.SetSizer(sizer_2)
        sizer_2.Fit(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame1

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame1(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()