我是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()
答案 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()