wxPython GridSizer - 处理空单元格

时间:2011-01-29 23:50:14

标签: python user-interface layout wxpython wxglade

我正在进行GUI编程,我正试图掌握wxPython。我正在尝试使用wxGlade,但事实证明它有点像马车。

我正在使用GridSizer进行布局。

我已经知道每次向sizer添加内容时,都会将其放入下一个单元格中。这意味着如果你有一个空单元格,你需要填充一些东西。我是对的吗?

这是我要去的布局(wxGlade截图):

wxGlade layout screenshot

问题是,生成代码我得到了这个:

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)

似乎是因为“向下”按钮被放入第7个单元格而不是第8个单元格。

处理此问题的标准方法是什么?你会把一些虚拟小部件填入空单元格吗?如果是这样的小部件?或者我使用了错误的sizer?

谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:4)

我更熟悉使用(0,0),这意味着为sizer添加可伸缩的大小。因此,可以创建一个像empty_cell = (0,0)这样的单个对象,然后在empty_cell中粘贴到sizer中需要空白空间的地方(例如,在接受的答案中使用wx.StaticText)。