Python 使用wx.BoxSizer定位按钮

Python 使用wx.BoxSizer定位按钮,python,wxpython,Python,Wxpython,我用wxpython3.0.2.0版本测试wx.BoxSizer 这就是我喜欢做的: 我将创建一个框架,包括一个带有4个按钮的面板 我希望第一个按钮位于屏幕的左上角,第二个按钮位于屏幕的右上角,第三个按钮位于屏幕的左下角,第四个按钮位于屏幕的右下角 我在下面向您提交我的代码 你能告诉我它是否正确吗 先谢谢你 # -*- coding: utf-8 -*- import wx class MyFrame(wx.Frame): def __init__(self): wx

我用wxpython3.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()

我想我找到了在面板中定位按钮的方法

我只是使用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()

您可以这样做,也可以从sizer中调用
AddStretchSpacer
。另一种方法是使用GridSizer。