尽管给它一个大小,wx.Panel会缩放以适合整个父帧

时间:2009-06-24 19:04:04

标签: wxpython

我是wxpython的新手。 我想要一个框架,并在一个小的面板区域,我着色蓝色。 但是无论我使用size属性执行wx.Panel,单个面板都会捕捉到其父框架的大小。 如果我添加另一个面板(下面的代码中的pane2),则会以正确的大小绘制两个窗格。

我知道我可以使用sizer来控制这些面板。但是我试图理解为什么wx.Panel对象的行为方式就像它独自一样。

以下是代码:

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

1 个答案:

答案 0 :(得分:12)

默认情况下,wx.Frame有一个sizer,可以扩展其子节点以填充框架。创建自己的sizer,向其添加面板(不指定展开标志)并将其设置为框架的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()