wxPython仅创建图像工具栏窗口

wxPython仅创建图像工具栏窗口,python,wxpython,Python,Wxpython,我正在尝试创建一个与我创建的工具栏大小相同的wxPython框架 我已经成功地创建了wx.Frame和空工具栏,但是窗口太大了,我如何使它正好适合工具栏 我试过的代码: import wx class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) vbox = wx.BoxSizer(wx.VE

我正在尝试创建一个与我创建的工具栏大小相同的wxPython框架

我已经成功地创建了wx.Frame和空工具栏,但是窗口太大了,我如何使它正好适合工具栏

我试过的代码:

import wx

class Example(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)

        vbox = wx.BoxSizer(wx.VERTICAL)

        toolbar1 = wx.ToolBar(self)
        toolbar1.SetToolBitmapSize(wx.Size(64, 64))
        toolbar1.Realize()
        vbox.Add(toolbar1, 0, wx.EXPAND)
        self.SetSizer(vbox)
        self.SetTitle('Toolbars')
        self.Centre()
        vbox.Fit(self)

app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()

无法将框架的大小设置为工具栏的大小。 差不多

self.size = toolbar1.size

我假设linux/mac上的工具栏大小为(0,0)的原因是b/c,没有附加任何工具。要解决此问题,您可以为工具栏设置最小大小,然后通过向工具栏大小添加边框标题和边框来计算边框大小

import wx


class Example(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)

        vbox = wx.BoxSizer(wx.VERTICAL)

        toolbar1 = wx.ToolBar(self)
        toolbar1.SetBackgroundColour(wx.RED)
        toolbar1.SetToolBitmapSize(wx.Size(64, 64))
        # prevent the sizer from setting the size to (0, 0) when there are no tools attached
        toolbar1.SetMinSize((64, 64))
        toolbar1.Realize()
        vbox.Add(toolbar1, 0, wx.EXPAND)
        self.SetSizer(vbox)
        self.SetTitle('Toolbars')
        self.Centre()
        vbox.Fit(self)
        self.Layout()

        # calculate the frame caption height
        caption_height = wx.SystemSettings.GetMetric(wx.SYS_CAPTION_Y, self)
        # *2 for the left and right border
        border_width = wx.SystemSettings.GetMetric(wx.SYS_BORDER_X, self) * 2

        # get the size of the toolbar
        sx, sy = toolbar1.GetSize()
        # set the frame size by adding the toolbar size to the border/caption size
        self.SetSize((sx + border_width, sy + caption_height))


app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()

这在Windows上有效,但在Linux和Mac上不可靠-在Mac toolbar1上。在Linux/Mac上大小返回(0,0)标题高度为-1,对于某些奇数,边框高度为=-1reason@PaulMorriss当您向其添加工具时,它是否会更改?