1

我有以下与尺寸相关的代码:

import wx

class TableSelectPanel(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        wx.Panel.__init__(self, parent, *args, **kwargs)

        self.title = wx.StaticText(self, label="Select Table")
        self.tableList = wx.ListBox(self)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.title)
        sizer.Add(self.tableList, flag=wx.EXPAND)
        self.SetSizerAndFit(sizer)

class LobbyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        
        self.tableSelect = TableSelectPanel(self)
        
        #window size
        self.SetMinSize((800, 600))
        self.SetMaxSize((800, 600))
        self.SetSize((800, 600))
        
        #sizers
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.tableSelect, flag=wx.EXPAND)
        
        self.SetSizer(sizer)

        self.Show(True)

我期望的是我将有一个 800x600 的窗口,wx.ListBox垂直拉伸以适应桌子的整个高度。但是,虽然我确实有一个 800x600 的窗口,但wx.ListBox它并没有扩展到整个高度。相反,似乎面板确实伸展了,但列表框没有:

布局不正确

我做错了什么?

4

1 回答 1

1

设置proportion为 1:

sizer.Add(self.tableList, proportion=1, flag=wx.EXPAND)

虽然这个参数的含义在 wxSizer 中是未定义的,但它在 wxBoxSizer 中用于指示一个 sizer 的子节点是否可以在 wxBoxSizer 的主方向上改变它的大小——其中 0 代表不可改变,大于零的值是相对于同一 wxBoxSizer 的其他子项的值进行解释。例如,你可能有一个水平的 wxBoxSizer,它有三个孩子,其中两个应该用 sizer 改变它们的大小。然后两个可拉伸窗口将分别获得 1 的值,以使它们与 sizer 的水平尺寸相等地增长和收缩。

于 2012-11-13T19:26:39.140 回答