必须调用 wx.Panel 两次才能设置正确的大小
Have to call wx.Panel twice to set the correct size
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Test',size=wx.Size(500,500))
self.panel = wx.Panel(self, -1,pos=(20,40),size=wx.Size(10,500))
self.panel = wx.Panel(self, -1,size=wx.Size(500,10))
self.Show()
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
此代码将在同一个 window 内创建两个面板对象。
如果删除任何一行 wx.Panel 调用,另一个面板的大小将不正确,它将填满整个框架。
为什么?
请参阅 wx.Frame
的文档:
wx.Frame
processes the following events:
- wxEVT_SIZE
: if the frame has exactly one child window, not counting the status and toolbar, this child is resized to take the entire frame client area. [...]
您可以定义自己的 Sizers 以指定不同的行为:
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Test',size=wx.Size(500,500))
self.panel = wx.Panel(self, -1,size=wx.Size(500,10))
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sizer.Add(self.panel)
self.SetSizer(self.sizer)
self.Show()
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Test',size=wx.Size(500,500))
self.panel = wx.Panel(self, -1,pos=(20,40),size=wx.Size(10,500))
self.panel = wx.Panel(self, -1,size=wx.Size(500,10))
self.Show()
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
此代码将在同一个 window 内创建两个面板对象。 如果删除任何一行 wx.Panel 调用,另一个面板的大小将不正确,它将填满整个框架。
为什么?
请参阅 wx.Frame
的文档:
wx.Frame
processes the following events:
-wxEVT_SIZE
: if the frame has exactly one child window, not counting the status and toolbar, this child is resized to take the entire frame client area. [...]
您可以定义自己的 Sizers 以指定不同的行为:
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Test',size=wx.Size(500,500))
self.panel = wx.Panel(self, -1,size=wx.Size(500,10))
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sizer.Add(self.panel)
self.SetSizer(self.sizer)
self.Show()