2010-04-12 146 views
3

好了,我正在學習有關wxPython的施膠劑,我想知道是否有可能做這樣的事情:尺寸儀... - wxPython的

============================================== 
|WINDOW TITLE       _ [] X| 
|============================================| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxNOTEBOOKxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| 
|________       ___________| 
|IMAGE |      |LoginForm | 
|________|      |___________| 
============================================== 

注意:是的,我從字面上wxPython - picking the right sizer to use in an application得到這個

筆記本擴展到左和底部,圖像左對齊和底部對齊登錄表單到右側和底部,我設法做的幾乎一切,但現在我有一個問題..

的問題是,我無法單獨對齊Loginform和Image(即時使用Box Sizer),而我也是我願意。

編輯:讓每個人都能明白我的意思: 「哦,我指的是,基本上,如果我改變了對齊,這將同時影響LoginForm的和圖像。例如,如果我設置對齊到右側,因爲:sizer.Add(sizer4,0,wx.ALIGN_RIGHT | wx.RIGHT,10),圖像和登錄形式都將對齊到右側。希望大家可以理解這一次「

This是我正在使用的代碼目前正在導致問題,任何幫助表示讚賞。 注意:由於我仍在學習Box Sizer,因此代碼可能(很害羞)。 繼承人一個測試代碼:

import wx 
class Sizerframe(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, 'sizertestframe',size=(790, 524)) 
     p = wx.Panel(self) 
     nb = wx.Notebook(p, size = (750, 332)) 
     button = wx.Button(p, -1, "loginform1rest", size=(94,23)) 
     button1 = wx.Button(p, -1, "Login", size=(94,23)) 
     button2 = wx.Button(p, -1, "Cancel", size=(94,23)) 
     imagebutton = wx.Button(p, -1, "imagebutton", size=(94,23)) 



     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer1 = wx.BoxSizer(wx.HORIZONTAL) 
     sizer1.Add(nb,1, wx.EXPAND) 
     sizer.Add(sizer1,1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) 
     sizer.Add((-1, 25)) 
     sizer2 = wx.BoxSizer(wx.VERTICAL) 
     sizer2.Add(button, 0) 
     sizer3 = wx.BoxSizer(wx.HORIZONTAL) 
     sizer3.Add(button1, 0) 
     sizer3.Add(button2,0, wx.LEFT, 5) 
     sizer2.Add(sizer3, 0) 

     sizer4 = wx.BoxSizer(wx.HORIZONTAL) 
     sizer4.Add(imagebutton, 1, wx.LEFT | wx.BOTTOM) 
     sizer4.Add(sizer2,0, wx.RIGHT | wx.BOTTOM , 5) 
     sizer.Add(sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10) 
     p.SetSizer(sizer) 

def main(): 
    app = wx.App() 
    frame = Sizerframe() 
    frame.Show() 
    app.MainLoop() 
if __name__ == '__main__': 
    main() 
+1

wxGlade。學習它,活下去,喜歡它。這並不完美,但比從頭開始手寫代碼要好得多。 – 2010-04-12 03:29:46

+0

感謝您的建議,雖然我仍然想知道是否有可能解決我的問題:)。 – dpswt 2010-04-12 03:33:21

+0

@Francisco - 你可以發佈一個最小但工作的例子的完整代碼?請儘可能簡單,不要使用圖像,登錄框等,只需使用按鈕或面板。有可能更好的例子,但我希望像我在這裏發佈的東西:http://stackoverflow.com/questions/2546979/2549783#2549783 – tom10 2010-04-12 03:50:10

回答

5

這樣的事情呢?

container = wx.BoxSizer(wx.VERTICAL) 
container.Add(self.nb, 1, wx.EXPAND) 

login = wx.BoxSizer(wx.VERTICAL) 
login.Add(self.userLabel) 
login.Add(self.userText) 

# ... clip, rest of login form additions here 

bottom = wx.BoxSizer(wx.HORIZONTAL) 
bottom.Add(image) 
bottom.Add((0, 0), 1, wx.EXPAND) 
bottom.Add(login) 

container.Add(bottom, 1, wx.EXPAND) 

基本上,bottom.Add((0, 0), 1, wx.EXPAND)將作爲該會佔用所有的圖像和登錄表單之間的空間隔離。我真的不明白你的意思是什麼「問題是我無法單獨對齊Loginform和Image(使用Box Sizer),我想」。我主要是在試圖創建佈局時遵循了這個例子。我希望這有幫助。

+0

感謝您的迴應,明天我正在睡覺時分析它,我還添加了一個測試代碼,以防您想要弄亂它,非常感謝您的回覆 – dpswt 2010-04-12 04:12:34

+0

沒問題。你可以使用不同的嵌套BoxSizer組合來製作大多數佈局。 – synic 2010-04-12 04:17:39

+0

哦,我說的基本上是,如果我改變了align,它會影響LoginForm和Image ..例如,如果我將align設置爲RIGHT,因爲: sizer.Add(sizer4,0,wx.ALIGN_RIGHT | wx.RIGHT,10) 希望你能理解這個時間 – dpswt 2010-04-12 04:18:39

0

只需在這裏添加標籤,我總是發現在wxFormBuilder中創建代碼框架並將代碼添加到項目中比在純Python中進行反覆試驗更容易。