wxPython:调整框架大小以匹配 sizer

wxPython: Resizing frame to match sizer

我正在尝试使用 wx.frame 在 wxPython 中创建一个浮动按钮栏。我已经开始使用 2 个按钮作为原型,但我无法调整框架本身的大小。 panel.SetSizerAndFit(sizer) 是正确的语句吗?

import wx

class MainToolbar(wx.Frame):
    def __init__(self):
        super(MainToolbar, self).__init__(None, title='some title')

        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        buttonSizer = wx.GridSizer(rows=1, cols=2, vgap=1, hgap=1)
        btn1 = wx.Button(panel, label='Ok', size=(100,100))
        btn2 = wx.Button(panel, label='Close', size=(100,100))
        buttonsArray = [ (btn1, 0, wx.EXPAND), (btn2, 0, wx.EXPAND) ]
        buttonSizer.AddMany(buttonsArray)
        sizer.Add(buttonSizer, proportion=1, flag=wx.EXPAND)
        panel.SetSizerAndFit(sizer)

if __name__ == "__main__":
    app = wx.App()
    frame = MainToolbar()
    frame.Show()
    app.MainLoop()

结果是:

将小部件放入带有 proportion=1EXPAND 标志的 sizer 中,将填充可用的 space。
此外,我不确定当您指定 size 并将小部件放入 sizer 时 wxPython 会做什么,我假设它使用隐式大小指令运行。

显然,如果您调整 window 的大小,我无法猜到您希望小部件如何反应,但这里有一个简单的方法来适应它。

import wx

class MainToolbar(wx.Frame):
    def __init__(self):
        super(MainToolbar, self).__init__(None, title='some title')

        panel = wx.Panel(self)
        buttonSizer = wx.GridSizer(rows=1, cols=2, vgap=1, hgap=1)
        btn1 = wx.Button(panel, label='Ok', size=(100,100))
        btn2 = wx.Button(panel, label='Close', size=(100,100))
        buttonsArray = [ (btn1), (btn2) ]
        buttonSizer.AddMany(buttonsArray)
        panel.SetSizer(buttonSizer)
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        mainsizer.Add(panel)
        self.SetSizerAndFit(mainsizer)
        self.Show()

if __name__ == "__main__":
    app = wx.App()
    frame = MainToolbar()
    app.MainLoop()