我有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。
I have a problem with wxPython. I have a frame and in that frame, I have a panel. In that panel, I want another panel of fixed size (100x100). My code is below:
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()When I run the program, my TestPanel widget is only 1x1 pixels. However, when I print the size using the GetSize method, it says that the size is 100x100. Why does it display as a 1x1 red block in this case?
I'm using wxPython 3.0.2.0 on OS X.
最满意答案
我不确定为什么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()I'm not sure why SetSize() doesn't work, but you can just pass the size to the constructor. That worked for me on Windows 7 with wxPython 3.0.2 where calling SetSize did not.
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()更多推荐
发布评论