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

har*_*jay 4 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()
Run Code Online (Sandbox Code Playgroud)

Fog*_*ird 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()
Run Code Online (Sandbox Code Playgroud)

  • 从这里:http://docs.wxwidgets.org/stable/wx_wxframe.html#wxframe"如果框架只有一个子窗口,不计算状态和工具栏,则调整此子项的大小以占用整个框架客户区域." 如果你喜欢我的答案,你应该投票给我.如果您认为答案是正确的,您应该将我的答案标记为正确.不管你有多新.:) (4认同)