使用 wxPython 的面板中的面板大小不正确

size of panel in panel using wxPython incorrect

我对 wxPython 有疑问。我有一个框架,在那个框架中,我有一个面板。在该面板中,我想要另一个固定大小 (100x100) 的面板。我的代码如下:

import wx

class TestPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.SetBackgroundColour(wx.RED)
        self.SetSize((100, 100))


class ExampleFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        self.panel = wx.Panel(self)
        self.panel.SetMinSize((-1, -1))
        self.panel.SetBackgroundColour(wx.WHITE)

        self.filesize = TestPanel(self.panel, -1)

        hSizer = wx.BoxSizer(wx.HORIZONTAL)
        hSizer.Add(self.filesize, 0, wx.CENTER)

        vSizer = wx.BoxSizer(wx.VERTICAL)
        vSizer.Add(hSizer, 1, wx.EXPAND)
        self.panel.SetSizer(vSizer)


app = wx.App(False)
frame = ExampleFrame(None)
frame.Show()
app.MainLoop()

当我 运行 程序时,我的 TestPanel 小部件只有 1x1 像素。但是,当我使用 GetSize 方法打印尺寸时,它说尺寸为 100x100。为什么在这种情况下它显示为 1x1 红色块?

我在 OS X 上使用 wxPython 3.0.2.0。

我不确定为什么 SetSize() 不起作用,但您可以将大小传递给构造函数。这对我有用 Windows 7 with wxPython 3.0.2 where calling SetSize didn't.

import wx

class TestPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, size=(100, 100), *args)
        self.SetBackgroundColour('red')
        self.Layout()


class ExampleFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        self.panel = wx.Panel(self)
        self.panel.SetMinSize((-1, -1))
        self.panel.SetBackgroundColour(wx.WHITE)

        self.filesize = TestPanel(self.panel, -1)

        hSizer = wx.BoxSizer(wx.HORIZONTAL)
        hSizer.Add(self.filesize, 0, wx.CENTER)

        vSizer = wx.BoxSizer(wx.VERTICAL)
        vSizer.Add(hSizer, 1, wx.EXPAND)
        self.panel.SetSizer(vSizer)

import wx.lib.inspection
app = wx.App(False)
frame = ExampleFrame(None)
frame.Show()
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()