【问题标题】:why can't this wxPython frame (and a panel inside) keep its size?为什么这个 wxPython 框架(和里面的面板)不能保持它的大小?
【发布时间】:2013-06-10 12:32:45
【问题描述】:

面板的背景颜色应用于整个框架!为什么会这样,我想知道。在这里,frame 是 (300,400),而 panel 应该是 (300,180)。我可能做错了什么。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import wx

class Panel(wx.Panel):
    def __init__(self, parent, id, pos, size):
        wx.Panel.__init__(self, parent, id, pos, size) 

class Frame(wx.Frame):
    def __init__(self, parent, id, title, pos, size, style):
        wx.Frame.__init__(self, parent, id, title, pos, size, style)
        self.userpanel = Panel(self, -1, (0,0), (300,180))
        self.userpanel.SetBackgroundColour('Gold')


class Application(wx.App):
    def __init__(self):
        wx.App.__init__(self)
        frame = Frame(None, -1, "Internet Login Tool", (-1,-1), (300,400),\
        wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))
        frame.Show()
        self.SetTopWindow(frame)

if __name__ == '__main__':
    app = Application()
    app.MainLoop()

【问题讨论】:

    标签: user-interface wxpython panel frame


    【解决方案1】:

    当您将面板添加到框架时,它会占用框架的整个区域,将面板添加到框架,然后将面板添加到框架面板,如下面修改后的代码所示

    import wx
    
    class Panel(wx.Panel):
        def __init__(self, parent, id, pos, size):
            wx.Panel.__init__(self, parent, id, pos, size) 
    
    class Frame(wx.Frame):
        def __init__(self, parent, id, title, pos, size, style):
            wx.Frame.__init__(self, parent, id, title, pos, size, style)
            framePanel = wx.Panel(self)
            self.userpanel = Panel(framePanel, -1, (0,0), (300,180))
            self.userpanel.SetBackgroundColour('Gold')
    
    
    class Application(wx.App):
        def __init__(self):
            wx.App.__init__(self)
            frame = Frame(None, -1, "Internet Login Tool", (-1,-1), (300,400),\
            wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX))
            frame.Show()
            self.SetTopWindow(frame)
    
    if __name__ == '__main__':
        app = Application()
        app.MainLoop()
    

    【讨论】:

    • 更具体地说,当 wx.Frame 只有一个子项(除菜单栏、工具栏和状态栏外)时,该子项会自动调整大小以填充框架的客户区。
    猜你喜欢
    • 2013-10-18
    • 2013-08-25
    • 1970-01-01
    • 2021-11-10
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多