【问题标题】:size of panel in panel using wxPython incorrect使用 wxPython 的面板中面板的大小不正确
【发布时间】:2016-02-04 12:38:06
【问题描述】:

我对 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。

【问题讨论】:

  • 我不确定,你有什么问题。当我在 ubuntu 15.10 和 python-wxgtk2.8 和 python 2.7.8 上运行代码时,代码工作得很好
  • 这很奇怪,因为如果我运行这段代码,它会显示为 1x1 块,而不是 100x100。我猜它是 OS X 相关的......
  • 这可能是一个原因。也许您可以尝试在白色面板中使用 SizeHints 函数而不是 setMinSize
  • 它与 OS X 无关。我在 Win 7 上遇到了同样的问题。
  • 尝试将第 7 行从 self.SetSize((100, 100)) 更改为 self.SetMinSize((100, 100))

标签: python wxpython size panel wxwidgets


【解决方案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()

【讨论】:

  • 谢谢。这对我有用。我仍然想知道为什么SetSize 不起作用...
  • 我也是。您可能想在 wxPython Google 小组上提问。他们或许能够对此有所了解。
猜你喜欢
  • 2015-03-08
  • 2013-08-25
  • 2021-11-10
  • 2013-10-18
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多