wxPython GridSizer - 处理空单元格
我正在尝试进行我的第一次图形用户界面(GUI)编程,正在学习使用wxPython。我想用wxGlade来帮助设计界面,但它似乎有点问题。
我正在使用GridSizer来布局。
我发现每次你往这个布局里添加东西时,它都会放到下一个单元格里。这意味着如果有一个空的单元格,你需要用某种东西填满它。我这样理解对吗?
这是我想要的布局(wxGlade的截图):
问题是,从这个布局生成的代码是这样的:
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)
看起来是因为“下”按钮被放到了第七个单元格,而不是第八个。
处理这个问题的标准方法是什么呢?你会在空的单元格里放一个占位的控件吗?如果是的话,放哪个控件比较好?还是说我用错了布局方式?
谢谢!
2 个回答
5
我比较熟悉使用 (0,0)
这个写法,它的意思是给布局添加可伸缩的大小。所以,你可以创建一个单独的对象,比如 empty_cell = (0,0)
,然后在需要留空的地方,比如在布局中使用 wx.StaticText 的地方,随处使用 empty_cell
。
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) ] )