Я пытаюсь правильно использовать wx.grid внутри sizer, но сетка выходит за пределы части sizer. Я хочу, чтобы wx.grid оставался в своей части сетки. Я ожидаю, что в конечном итоге я буду с полосами прокрутки в случае необходимости.
У меня есть два элемента управления в BoxSizer, один - wx.grid.Grid, а другой - wx.TextCtrl. В сетке больше строк, чем будет зафиксировано в доступном пространстве.
Проблема в том, что сетка покрывает textctl, а не останавливается на вершине textctl. Полосы прокрутки отображаются, если сетка больше, чем размер окна
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)