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

时间:2016-02-04 12:38:07

标签: python wxpython size panel wxwidgets

我遇到了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。

1 个答案:

答案 0 :(得分:1)

我不确定为什么SetSize()不起作用,但您可以将大小传递给构造函数。这对我在Windows 7上使用wxPython 3.0.2起作用,其中调用SetSize没有。

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()