【问题标题】:wxPython GridSizer - dealing with empty cellswxPython GridSizer - 处理空单元格
【发布时间】:2011-06-17 22:25:50
【问题描述】:

我第一次涉足 GUI 编程,我正在尝试掌握 wxPython。我正在尝试使用 wxGlade,但结果有点问题。

我正在使用 GridSizer 进行布局。

我计算出,每次您向 sizer 添加东西时,它都会被放入下一个单元格。这意味着如果你有一个空单元格,你需要用一些东西来填充它。我说的对吗?

这是我想要的布局(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)

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

处理这个问题的标准方法是什么?您会放入某种虚拟小部件来填充空单元格吗?如果是这样,哪个小部件?还是我使用了错误的sizer?

谢谢!

【问题讨论】:

    标签: python user-interface layout wxpython wxglade


    【解决方案1】:

    正如您所说...添加一个虚拟小部件(空白静态文本)效果很好。您也可以使用 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) ] )
    

    【讨论】:

    • 感谢AddMany 提示! (0,0) 作为一个虚拟小部件怎么样?不要以为你能得到比这更简单的:)
    • 感谢您的好主意。我正在添加面板和 textctrl 之间,它被计入我按下的选项卡中,因此要在两个 textctrl 之间移动,我必须按下多个选项卡以覆盖之间的面板
    【解决方案2】:

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

    【讨论】:

    • 两种解决方案都对我有用。然而,使用 StaticText 的解决方案,由于 StaticText 和面板的默认颜色不同,空白区域是可见的。使用 emptycell = (0,0),不会出现此问题。因此,这对我来说是更合适的答案
    猜你喜欢
    • 2018-02-18
    • 2012-12-06
    • 2014-12-05
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多