Wxpython 面板缩放以适应整个父框架,尽管给定了它的大小

Wxpython 面板缩放以适应整个父框架,尽管给定了它的大小,wxpython,Wxpython,我是wxpython的新手。 我试图有一个框架,在一个小的面板区域内,我把它涂成蓝色。 但是,无论我使用size属性对wx.Panel执行什么操作,单个面板都会捕捉到其父帧的大小。 如果我添加另一个面板(下面代码中的pane2),则两个窗格都以正确的大小绘制 我知道我可以用浆纱机控制这些面板。但是我试图理解为什么wx.Panelobject在单独运行时的行为方式 代码如下: import wx class PlateGui(wx.Frame): def __init__(se

我是
wxpython
的新手。 我试图有一个框架,在一个小的面板区域内,我把它涂成蓝色。 但是,无论我使用size属性对wx.Panel执行什么操作,单个面板都会捕捉到其父帧的大小。 如果我添加另一个面板(下面代码中的pane2),则两个窗格都以正确的大小绘制

我知道我可以用浆纱机控制这些面板。但是我试图理解为什么
wx.Panel
object在单独运行时的行为方式

代码如下:

import wx

    class PlateGui(wx.Frame):

    def __init__(self, *args , **kwds):
        self.frame = wx.Frame.__init__(self,*args, **kwds)
        print "Made frame"


if __name__ == "__main__":
    an_app = wx.PySimpleApp()
    aframe = PlateGui(parent=None,id=-1,title="Test Frame",size=(300, 300))
    pane = wx.Panel(parent=aframe,size=(100,100),style=wx.RAISED_BORDER)
    pane.SetBackgroundColour(wx.Colour(0,0,255))
 #  pane2 = wx.Panel(parent=aframe,size=(200,100),style=wx.RAISED_BORDER)
 # Commenting out the second pane makes the first pane fit 
 # entire frame regardless of size specified  
    aframe.Show()
    an_app.MainLoop()

默认情况下,wx.Frame有一个sizer,可以扩展其子对象以填充该帧。创建您自己的大小调整器,将面板添加到其中(不指定展开标志),并将其设置为框架的大小调整器

import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, -1, 'Test')
sizer = wx.BoxSizer(wx.VERTICAL)
panel = wx.Panel(frame, -1, size=(100,100), style=wx.BORDER_RAISED)
sizer.Add(panel)
frame.SetSizer(sizer)
frame.Show()
app.MainLoop()

真棒的雾鸟——多亏了一吨——wx.Frame的这一“特征”将其尺寸仪强加于它唯一的孩子身上的记录不是很好,或者是吗?。我挣扎了几个小时,当我最后添加第二个窗格时,wx.Frame从它的sizer中释放了第一个窗格。文档中是否有我可以从中找到答案的地方?我会投票支持你,但我是Stackoverflow的新手,我想新手谢谢你对你没有任何帮助。感谢您从这里回答这个问题:“如果框架只有一个子窗口,不包括状态和工具栏,则此子窗口的大小将调整为占据整个框架客户端区域。”如果您喜欢我的答案,您应该投票支持我。如果你相信我的答案是正确的,你就应该把它标为正确的。不管你有多新。:)嘿,几年后我遇到了一个问题:假设我仍然想要一个测码器,但我也希望面板能够安装到父框架中,我需要做什么
sizer.add(panel,wx.EXPAND)
似乎不起作用。请尝试
sizer.add(panel,1,wx.EXPAND)