В моем приложении wx Python GUI я хочу показать диалог с сеткой на нем и двумя кнопками под этой сеткой. Сетка может быть инициализирована несколькими строками, что заранее неизвестно. Моя цель состоит в том, чтобы автоматически позволить диалоговому окну стать настолько большим, насколько это необходимо для включения всей сетки (т. Е. Я хотел бы избежать полос прокрутки сетки).
Однако я не могу этого добиться работать даже при использовании sizer и флага wx.EXPAND
. Есть идеи, что я здесь делаю не так? Это полностью рабочий пример моей проблемы:
import wx
import wx.grid
class MyApp(wx.Frame):
def __init__(self):
super(MyApp, self).__init__(None, title="wxPython Sizers", style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
self.panel = wx.Panel(self)
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
# Keras model to product / pipe type mapping grid
logtab = wx.grid.Grid(self.panel)
logtab.CreateGrid(25, 3)
logtab.SetColLabelValue(0, "One")
logtab.SetColLabelValue(1, "Two")
logtab.SetColLabelValue(2, "Three")
grid_sizer = wx.BoxSizer(wx.VERTICAL)
grid_sizer.Add(logtab, wx.ID_ANY, wx.EXPAND)
self.panel.SetSizer(grid_sizer)
# Dialog buttons
btns = wx.BoxSizer(wx.HORIZONTAL)
save_button = wx.Button(self, label="Save")
cancel_button = wx.Button(self, label="Cancel")
btns.Add(save_button)
btns.Add(cancel_button)
# Set final dialog layout
self.main_sizer.Add(self.panel, proportion=1, flag=wx.ALL | wx.EXPAND, border=15)
self.main_sizer.Add(btns, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=15)
self.SetSizerAndFit(self.main_sizer)
self.Layout()
self.Center()
self.Show()
if __name__ == "__main__":
wxapp = wx.App()
myApp = MyApp()
wxapp.MainLoop()