【问题标题】:Placing elements (panels) within a wx.GridBagSizer在 wx.GridBagSizer 中放置元素(面板)
【发布时间】:2011-06-09 17:09:00
【问题描述】:

我正在使用 gridbagsizer 将两个面板放置在一个框架内。

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL)
main_panel = wx.Panel(self, id=ID_MAIN_PANEL)

frame_sizer = wx.GridBagSizer(1, 1)
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND)
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND)
frame_sizer.AddGrowableRow(0)
frame_sizer.AddGrowableCol(0)
self.SetSizer(frame_sizer)

我希望 control_panel 位于 main_panel 上方(如上所示)。然而,这是我得到的输出:

当我指定相反时,我不知道为什么顶部面板比底部面板大得多。 (2, 5) 表示顶部,(5, 5) 表示底部。当我把它缩小时它也有一个奇怪的行为,它基本上给了我我想要的东西(见下图),但是当我再次放大它时我不知道如何保持这个比例。

但是,当您开始将尺寸调整得更大(即使是很小的量)时,您会看到(下方)形状和比例在另一个方向上发生了显着变化(底部变得更小而顶部变得更大)。

仍在尝试学习这个sizer,并且在我看到的任何示例中都找不到这个问题。还尝试尝试所有参数并进行一些测试,但我无法弄清楚这里发生了什么。任何帮助将不胜感激。

编辑:添加下面的图像以帮助下面的评论。

【问题讨论】:

    标签: python user-interface wxpython sizer


    【解决方案1】:

    就个人而言,我会在垂直方向使用 BoxSizer。这是一个简单的例子:

    import wx
    
    class MyForm(wx.Frame):
    
        def __init__(self):
            wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")
    
            # Add a panel so it looks the correct on all platforms
            panel = wx.Panel(self, wx.ID_ANY)
    
            control_panel = wx.Panel(panel)
            control_panel.SetBackgroundColour("Yellow")
            main_panel = wx.Panel(panel)
            main_panel.SetBackgroundColour("Blue")
    
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(control_panel, 3, wx.EXPAND)
            sizer.Add(main_panel, 1, wx.EXPAND)
            panel.SetSizer(sizer)
    
    # Run the program
    if __name__ == "__main__":
        app = wx.PySimpleApp()
        frame = MyForm().Show()
        app.MainLoop()
    

    我更改了每个面板的背景颜色,以便更容易分辨哪个是哪个。请注意,我将控制面板的比例设置为 3,将主面板的比例设置为 1。您可能还想查看 Widget Inspection Tool 以帮助您将其可视化:

    http://wiki.wxpython.org/Widget%20Inspection%20Tool

    【讨论】:

    • 我还能使用 SetMaxSize 吗?我希望顶部面板保持相同大小(在 y 中,但可通过 x 扩展),但底部面板要扩展(在 x 和 y 中)。
    • 我不确定...您也许可以使用嵌套大小的顶部面板来获得它,但我不知道。
    【解决方案2】:

    在网格的七行五列中,您仅指定第一行和第一列可增长。

    控制面板占据第一行,因此它会展开以占用可用空间。

    wx.EXPAND 标志仅在单元格位于可增长的行或列中时才有效。

    【讨论】:

    • 谢谢,我已经为所有的行和列添加了可增长的,它看起来好多了,但是我实际上希望顶部面板扩展到一定的大小然后停止。但是底部窗口可以在调整大小时继续变大。这可能吗?
    • 尝试使用 SetMaxSize 来限制控制面板的高度。您还可以使控制面板的高度固定(使用 SetSize),而不使其占据的行可增长。或者,您可以通过更改这两个面板中每个面板跨越的可增长行数来调整比例。
    • 我添加了 control_panel.SetMaxSize(wx.Size(150, 300)) 但它似乎没有做任何事情,我仍然可以在任何地方扩展它。此外(这发生在使所有行/列都可增长之后)当它被调整为某些形状时,框架的边缘会出现一些奇怪的空间(我在上面添加了一个额外的图像)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多