Монтаж рамы wx Windows в сетку - PullRequest
1 голос
/ 12 февраля 2020

В моем приложении 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()
...