2015-05-31 47 views
1

我用wxPython 3.0.2.0发布版测试wx.BoxSizer。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() 

回答

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() 
+0

你可以这样做,或者你可以从你的sizer调用'AddStretchSpacer'。另一种方法是使用GridSizer。 –