【问题标题】:Have to call wx.Panel twice to set the correct size必须调用 wx.Panel 两次才能设置正确的大小
【发布时间】:2019-10-16 01:58:43
【问题描述】:
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 调用中的任何一行被删除,另一个面板的大小将不正确,并且会填满整个框架。

为什么?

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    查看wx.Frame的文档:

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

    您可以定义自己的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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      相关资源
      最近更新 更多