2010-06-30 4 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)

Потому что вам нужно задать размер панели1, а не только строку.