首页 > 解决方案 > 必须调用 wx.Panel 两次才能设置正确的大小

问题描述

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

此代码将在同一窗口内创建两个面板对象。如果 wx.Panel 调用中的任何一行被删除,另一个面板的大小将不正确,并且会填满整个框架。

为什么?

标签: pythonwxpython

解决方案


请参阅以下文档wx.Frame

wx.Frame处理以下事件:
- wxEVT_SIZE:如果框架只有一个子窗口,不包括状态和工具栏,则调整该子窗口的大小以占据整个框架客户区。[...]

您可以定义自己的Sizer来指定不同的行为:

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

推荐阅读