如何正确调整 wx.grid.Grid 的大小使其不覆盖其他控件?

How to correclty size a wx.grid.Grid so it doesn't cover other controls?

我尝试在 sizer 中正确使用 wx.grid,但转义的网格是 sizer 的一部分。我希望 wx.grid 留在其网格部分。如果需要,我希望我最终会使用滚动条。

我在 BoxSizer 中有两个控件,一个是 wx.grid.Grid,另一个是 wx.TextCtrl。网格中的行数多于可用 space 中将修复的行数。

问题是网格覆盖了 textctl 而不是停在 textctl 的顶部。如果网格大于 window 大小

,滚动条会显示

import wx
import wx.grid

app = wx.App(False)
frame = wx.Frame(None, wx.ID_ANY, "Grid Test", size=(1000, 1200))
panel  = wx.Panel(frame, wx.ID_ANY, size=(-1, -1))

mygrid = wx.grid.Grid(panel, size=(-1, -1))

num_rows = 50
mygrid.CreateGrid(num_rows, 10)

for i in range(num_rows):
    mygrid.SetCellValue(i, 0, "Yes")
    mygrid.SetCellValue(i, 1, "This is a DUT")
    mygrid.SetCellValue(i, 2, "TP-Link TL-WR841N")
    mygrid.SetCellValue(i, 3, "802.11ax (2.4 GHz)")
    mygrid.SetCellValue(i, 4, "WPA2-PSK with AES")
    mygrid.SetCellValue(i, 5, "11 - 2412 Mhz")
    mygrid.SetCellValue(i, 6, "160 MHz")
    mygrid.SetCellValue(i, 7, "Fail - Iperf")
    mygrid.SetCellValue(i, 8, "%daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" % i)
    mygrid.SetCellValue(i, 9, "%dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" % i)

mygrid.SetRowLabelSize(0)
mygrid.AutoSizeColumns(True)
mygrid.EnableDragRowSize(False)
mygrid.AutoSize()

tc = wx.TextCtrl(panel, size=(-1, -1), style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2)

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.AddSpacer(10)
sizer.Add(mygrid, 2, wx.EXPAND | wx.LEFT | wx.RIGHT, 50)
sizer.AddSpacer(20)
sizer.Add(tc, 1, wx.EXPAND | wx.LEFT | wx.RIGHT, 50)
sizer.AddSpacer(10)

sizer.SetSizeHints(panel)
panel.SetSizerAndFit(sizer)

frame.Show()
app.MainLoop()

这是 运行 时间:

Ubuntu 18.04.2

libwxbase3.0-0v5 (3.0.4+dfsg-3)
libwxgtk3.0-gtk3-0v5 (3.0.4+dfsg-3)
python-wxgtk3.0 (3.0.2.0+dfsg-7)
python-wxversion (3.0.2.0+dfsg-7)

libgtk-3-0 (3.22.30-1ubuntu2)

只需给 grid 一个尺码。
例如

mygrid = wx.grid.Grid(panel, size=(1000, 600))

编辑:

我相信除非网格有大小或 MinSize,否则 sizer 会感到困惑。

所以要么给它一个尺寸(如上)

给它一个 Minsize 即

mygrid.SetMinSize((400,600))