wxPython GridSizer - 处理空单元格

4 投票
2 回答
4479 浏览
提问于 2025-04-16 10:52

我正在尝试进行我的第一次图形用户界面(GUI)编程,正在学习使用wxPython。我想用wxGlade来帮助设计界面,但它似乎有点问题。

我正在使用GridSizer来布局。

我发现每次你往这个布局里添加东西时,它都会放到下一个单元格里。这意味着如果有一个空的单元格,你需要用某种东西填满它。我这样理解对吗?

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

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) ] )

撰写回答