Python wx.面板中的wx.面板

Python wx.面板中的wx.面板,python,wxpython,panel,wxwidgets,Python,Wxpython,Panel,Wxwidgets,当我在另一个wx.Panel中嵌入wx.Panel(此处ChildPanel嵌入MyPanel)时,默认情况下,此ChildPanel不使用父级的完整大小。为什么? 有没有一个技巧可以说明ChildPanel应该使用MyPanel的全部空间? 是否可以不使用BoxSizer? import wx class MyPanel(wx.Panel): def __init__(self, *args, **kwargs): wx.Panel.__init__(self, *ar

当我在另一个
wx.Panel
中嵌入
wx.Panel
(此处
ChildPanel
嵌入
MyPanel
)时,默认情况下,此ChildPanel不使用父级的完整大小。为什么?

有没有一个技巧可以说明
ChildPanel
应该使用
MyPanel
的全部空间? 是否可以不使用
BoxSizer

import wx

class MyPanel(wx.Panel):
   def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.SetBackgroundColour('#00f8f8')

        # ChildPanel
        self.ChildPanel = wx.Panel(self)
        self.ChildPanel.SetBackgroundColour('#000000')

class DrawFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        MyPanel(self)
        self.Show()        

app = wx.App(False)
F = DrawFrame(None, title="Test", size=(500,500))
app.MainLoop() 

wxFrame
是一种特殊情况,是唯一一个调整其唯一子窗口大小以完全填充其客户端区域的窗口。其他窗口(包括
wxPanel
)不这样做,因此您确实需要使用一个大小调整器,或者在
wxEVT_SIZE
处理程序中手动定位子面板


当然,如果你仔细想想,这是有道理的:虽然一个
wxPanel
完全覆盖
wxFrame
是很常见的,但是一个
wxPanel
wxWindow
作为另一个
wxPanel
的独生子是非常罕见的,因为这样做根本没有任何意义,你只是白白浪费了一个窗口(而窗口是一个相对沉重的资源,所以你不应该这样做)。

wxFrame
是一个特例,是唯一一个调整其唯一子窗口大小以完全填满其客户区的窗口。其他窗口(包括
wxPanel
)不这样做,因此您确实需要使用一个大小调整器,或者在
wxEVT_SIZE
处理程序中手动定位子面板


当然,如果你仔细想想,这是有道理的:虽然一个
wxPanel
完全覆盖
wxFrame
是很常见的,但是一个
wxPanel
wxWindow
作为另一个
wxPanel
的独生子是非常罕见的,因为这样做根本没有任何意义,你只是白白浪费了一个窗口(而窗口是一个相对沉重的资源,所以你不应该这样做)。

wxFrame
是一个特例,是唯一一个调整其唯一子窗口大小以完全填满其客户区的窗口。其他窗口(包括
wxPanel
)不这样做,因此您确实需要使用一个大小调整器,或者在
wxEVT_SIZE
处理程序中手动定位子面板


当然,如果你仔细想想,这是有道理的:虽然一个
wxPanel
完全覆盖
wxFrame
是很常见的,但是一个
wxPanel
wxWindow
作为另一个
wxPanel
的独生子是非常罕见的,因为这样做根本没有任何意义,你只是白白浪费了一个窗口(而窗口是一个相对沉重的资源,所以你不应该这样做)。

wxFrame
是一个特例,是唯一一个调整其唯一子窗口大小以完全填满其客户区的窗口。其他窗口(包括
wxPanel
)不这样做,因此您确实需要使用一个大小调整器,或者在
wxEVT_SIZE
处理程序中手动定位子面板



当然,如果你仔细想想,这是有道理的:虽然一个
wxPanel
完全覆盖
wxFrame
是很常见的,但是一个
wxPanel
wxWindow
作为另一个
wxPanel
的独生子是非常罕见的,因为这样做根本没有任何意义,你只是白白浪费了一个窗口(而窗口是一个相对沉重的资源,所以你不应该这样做)。

你需要将它放在一个sizer中,wx.GROW或wx.EXPAND作为它的标志之一。。。或者,如果kwargs不可调整大小,则手动从kwargs设置大小。.mypanel可能也不会填充框架,因为它没有添加到大小调整器,并且您没有将大小参数传递给构造函数。。。这个问题真把我弄糊涂了。。如果您没有设置尺寸或大小,为什么您希望面板填充框架或当前面板?如果没有
大小调整器
,难道不可能吗?我认为childpanel可以在默认情况下填充框架或面板,而不使用大小。例如:默认情况下,一个
wx.panel
填充父
wx.frame
而不使用大小调整器。不,它不。。。不是典型的。。。它们可能都具有相同的默认大小(因此,如果没有传递任何大小参数,它们将是相同的大小),或者如果将大小参数冒泡到面板。。。你为什么不直接使用一个大小调整器或手动设置大小呢?它可以:在这里尝试代码,在创建
MyPanel
时没有
size
参数。但是
MyPanel
填充了父级
DrawFrame
的100%,即使没有sizer,对吗?您需要将其放入一个sizer中,并将wx.GROW或wx.EXPAND作为其标志之一。。。或者,如果kwargs不可调整大小,则手动从kwargs设置大小。.mypanel可能也不会填充框架,因为它没有添加到大小调整器,并且您没有将大小参数传递给构造函数。。。这个问题真把我弄糊涂了。。如果您没有设置尺寸或大小,为什么您希望面板填充框架或当前面板?如果没有
大小调整器
,难道不可能吗?我认为childpanel可以在默认情况下填充框架或面板,而不使用大小。例如:默认情况下,一个
wx.panel
填充父
wx.frame
而不使用大小调整器。不,它不。。。不是典型的。。。它们可能都具有相同的默认大小(因此,如果没有传递任何大小参数,它们将是相同的大小),或者如果将大小参数冒泡到面板。。。你为什么不直接使用一个大小调整器或手动设置大小呢?它可以:在这里尝试代码,在创建
MyPanel
时没有
size
参数。但是
MyPanel
填充了父级
DrawFrame
的100%,即使没有sizer,对吗?您需要将其放入一个sizer中,并将wx.GROW或wx.EXPAND作为其标志之一。。。或者,如果kwargs不可调整大小,则手动从kwargs设置大小。.mypanel可能也不会填充框架,因为它没有添加到大小调整器,并且您没有将大小参数传递给构造函数。。。这个问题真把我弄糊涂了。。为什么?