使用wx.BoxSizer定位按钮

时间:2015-05-31 09:42:13

标签: python wxpython

我使用wxPython 3.0.2.0发布测试wx.BoxSizer。

这就是我喜欢做的事情:

我会创建一个包含带4个按钮的面板的框架。

我希望第一个按钮位于屏幕的左上角,第二个,右上角,第三个按钮位于左下方,第四个位于屏幕右下角。

我在下面提交了我的代码。

你能告诉我它是否正确吗?

提前谢谢。

# -*- coding: utf-8 -*-

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, title="Test of BoxSizer")
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox=wx.BoxSizer(wx.HORIZONTAL)
        hbox1=wx.BoxSizer(wx.HORIZONTAL)
        self.panel=wx.Panel(self)
        self.btn1=wx.Button(self.panel, label="Button 1")
        self.btn2=wx.Button(self.panel, label="Button 2")
        self.btn3=wx.Button(self.panel, label="Button 3")
        self.btn4=wx.Button(self.panel, label="Button 4")
        hbox.Add(self.btn1, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox.Add((0,0), proportion=4, flag=wx.EXPAND)
        hbox.Add(self.btn2, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox1.Add(self.btn3, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox1.Add((0,0), proportion=4, flag=wx.EXPAND)
        hbox1.Add(self.btn4, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        vbox.Add(hbox, proportion = 1, flag=wx.CENTER | wx.ALL, border = 5)
        #vbox.Add((0,0), proportion = 1, flag=wx.EXPAND)
        vbox.Add(hbox1, proportion = 1, flag=wx.CENTER | wx.ALL, border = 5)
        self.panel.SetSizer(vbox)
        vbox.SetSizeHints(self)
        self.Centre()
if __name__ == '__main__':
    app = wx.App(redirect = False)
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()

1 个答案:

答案 0 :(得分:0)

我想我找到了解决我在面板中定位按钮问题的方法。

我只是使用了sizer wx.BoxSizer的Add方法的比例参数。

我在下面提交了更正后的代码,希望这能帮助像我这样的其他新手。

# -*- coding: utf-8 -*-

import wx

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, title="Test of BoxSizer")
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox=wx.BoxSizer(wx.HORIZONTAL)
        hbox1=wx.BoxSizer(wx.HORIZONTAL)
        self.panel=wx.Panel(self)
        self.btn1=wx.Button(self.panel, label="button 1")
        self.btn2=wx.Button(self.panel, label="button 2")
        self.btn3=wx.Button(self.panel, label="button 3")
        self.btn4=wx.Button(self.panel, label="button 4")
        hbox.Add(self.btn1, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox.Add((0,0), proportion=4, flag=wx.EXPAND)
        hbox.Add(self.btn2, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox1.Add(self.btn3, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        hbox1.Add((0,0), proportion=4, flag=wx.EXPAND)
        hbox1.Add(self.btn4, proportion = 1, flag=wx.CENTER | wx.ALL, border=5)
        vbox.Add(hbox, proportion = 1, flag=wx.CENTER | wx.ALL, border = 5)
        #vbox.Add((0,0), proportion = 4, flag=wx.EXPAND)
        vbox.Add(hbox1, proportion = 1, flag=wx.CENTER | wx.ALL, border = 5)
        self.panel.SetSizer(vbox)
        vbox.SetSizeHints(self)
        self.Centre()
if __name__ == '__main__':
    app = wx.App(redirect = False)
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()