2015-05-31 51 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。 –