2010-06-30 23 views
2

我遇到以下代码的问题,我不明白。面板不在wxPython中展开

为什么panel1不扩展?

谢谢。

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, mytitle, mysize): 
     wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize) 
     panel1 = wx.Panel(self) 
     panel2 = wx.Panel(self) 
     panel3 = wx.Panel(self) 

     panel1.SetBackgroundColour("green") 
     panel2.SetBackgroundColour("yellow") 
     panel3.SetBackgroundColour("red") 

     sizer_h = wx.BoxSizer(wx.HORIZONTAL) 
     sizer_v = wx.BoxSizer(wx.VERTICAL) 

     st1 = wx.StaticText(panel1, -1, "TEST") 
     sizer_h.Add(st1, 1, wx.EXPAND) 
     sizer_v.Add(sizer_h, proportion=1, flag=wx.EXPAND) 
     sizer_v.Add(panel2, proportion=2, flag=wx.EXPAND) 
     sizer_v.Add(panel3, proportion=1, flag=wx.EXPAND) 
     # only set the main sizer if you have more than one 
     self.SetSizer(sizer_v) 

app = wx.App() 
mytitle = "wx.Frame & wx.Panels" 
width = 300 
height = 320 
MyFrame(None, mytitle, (width, height)).Show() 
app.MainLoop() 

回答

1

您想将面板添加到sizer_h而不是st1。

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, mytitle, mysize): 
     wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize) 
     panel1 = wx.Panel(self) 
     panel2 = wx.Panel(self) 
     panel3 = wx.Panel(self) 

     panel1.SetBackgroundColour("green") 
     panel2.SetBackgroundColour("yellow") 
     panel3.SetBackgroundColour("red") 

     sizer_h = wx.BoxSizer(wx.HORIZONTAL) 
     sizer_v = wx.BoxSizer(wx.VERTICAL) 

     st1 = wx.StaticText(panel1, -1, "TEST") 
     sizer_h.Add(panel1, wx.EXPAND) 
     sizer_v.Add(sizer_h, proportion=1, flag=wx.EXPAND) 
     sizer_v.Add(panel2, proportion=2, flag=wx.EXPAND) 
     sizer_v.Add(panel3, proportion=1, flag=wx.EXPAND) 
     # only set the main sizer if you have more than one 
     self.SetSizer(sizer_v) 

app = wx.App() 
mytitle = "wx.Frame & wx.Panels" 
width = 300 
height = 320 
MyFrame(None, mytitle, (width, height)).Show() 
app.MainLoop() 

您现在可以看到,该面板将展开其分级机的整个宽度,和静态文本的高度,而其余部分由一个空格所占据。也不太清楚如何垂直填写面板也让没有灰色泄漏通过了,不好意思

2

您需要修改该生产线是:

sizer_h.Add(st1, 1, wx.EXPAND)

应该是:

sizer_h.Add(panel1, 1, wx.EXPAND)

因为您需要调整panel1的大小而不仅仅是字符串。