2011-01-29 57 views
4

我正在開發我的第一個GUI編程程序,我試圖去掌握wxPython。我正在嘗試使用wxGlade,但事實證明它有點兒bug。wxPython GridSizer - 處理空單元格

我正在使用GridSizer進行佈局。

我已經發現,每次你給sizer添加東西時,它都會被放入下一個單元格。這意味着如果你有一個空單元格,你需要填寫一些東西。我對嗎?

這是我要的佈局(wxGlade截圖):

enter image description here

grid_sizer_1 = wx.GridSizer(3, 3, 0, 0) 
    grid_sizer_1.Add(self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0) 
    grid_sizer_1.Add(self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 0) 
    grid_sizer_1.Add(self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0) 
    grid_sizer_1.Add(self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL, 0) 
    grid_sizer_1.Add(self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0) 
    grid_sizer_1.Add(self.button_right, 0, wx.ALIGN_CENTER_VERTICAL, 0) 
    grid_sizer_1.Add(self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) 

wxGlade layout screenshot

的問題是,從我得到這個代碼生成

看起來是因爲「向下」按鈕被放入第7個單元而不是第8個單元。

處理這個問題的標準方法是什麼?你會把一些虛構的小部件填入空單元嗎?如果是這樣的小部件?還是我使用了錯誤的sizer?

謝謝!

回答

9

正如你所說......添加一個虛擬小部件(空白靜態文本)效果很好。您也可以使用AddMany()而不是多個add()。

grid_sizer_1 = wx.GridSizer(3, 3, 0, 0) 
grid_sizer_1.AddMany([ 
    (self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL), 
    (self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL), 
    (self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL), 
    (self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL), 
    (self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL), 
    (self.button_right, 0, wx.ALIGN_CENTER_VERTICAL), 
    (wx.StaticText(self, -1, ''), 0, wx.EXPAND), 
    (self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL) ]) 
+1

感謝您使用`AddMany`提示! `(0,0)`作爲一個虛擬小部件怎麼樣?不要以爲你可以變得更簡單:) – Acorn 2011-01-30 00:18:58

2

我對使用(0,0)更加熟悉,這意味着在sizer中添加可伸縮的尺寸。因此,可以創建一個單獨的對象,如empty_cell = (0,0),然後在empty_cell的任意位置粘貼sizer所需的空白空間(例如,在接受的答案中使用wx.StaticText)。