2011-09-27 54 views
0

我想显示一个按钮,当我点击添加到主面板时,会自动添加到面板的BoxSizer的静态文本。我有这个代码,但不是很好。任何人都可以帮助我?我很绝望。由于学习wxPython,基本的东西

import wx 

class MyApp(wx.App): 
    def OnInit(self): 
     self.frame = MainFrame(None,title='') 
     self.SetTopWindow(self.frame) 
     self.frame.Show() 
     return True 

class MainFrame(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     super(MainFrame, self).__init__(*args, **kwargs) 

     #Atributos 
     self.panel = MainPanel(self) 
     self.CreateStatusBar() 

     #Layout 
     self.sizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.sizer.Add(self.panel,1,wx.EXPAND) 
     self.SetSizer(self.sizer) 

class MainPanel(wx.Panel): 
    def __init__(self, parent): 
     super(MainPanel, self).__init__(parent) 

     #Atributos 
     bmp = wx.Bitmap('./img.png',wx.BITMAP_TYPE_PNG) 
     self.boton = wx.BitmapButton(self,bitmap=bmp) 

     # Layout 
     self.sizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.sizer.Add(self.boton) 
     self.SetSizer(self.sizer) 

     self.Bind(wx.EVT_BUTTON,self.add,self.boton) 

    def add(self,event): 
     self.sizer.Add(wx.StaticText(self,label='Testing')) 


if __name__ == "__main__": 
    app = MyApp(False) 
    app.MainLoop() 
+0

你应该对你的问题更具体一点,你的意思是什么不行? – Mansuro

+0

我的问题是boxsizer不能更新。 – Breixo

回答

4

如果你的问题是,你的文本最初显示了后面的按钮被点击时,你可以强制分级机通过添加到您面板的Layout方法的调用来更新。

class MainPanel(wx.Panel): 
    def __init__(self, parent): 
     super(MainPanel, self).__init__(parent) 

     #Atributos 
     bmp = wx.Bitmap('./img.png',wx.BITMAP_TYPE_PNG) 
     self.boton = wx.BitmapButton(self,bitmap=bmp) 

     # Layout 
     self.sizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.sizer.Add(self.boton) 
     self.SetSizer(self.sizer) 

     self.Bind(wx.EVT_BUTTON,self.add,self.boton) 

    def add(self,event): 
     self.sizer.Add(wx.StaticText(self,label='Testing')) 
     self.Layout() 
+0

谢谢你,那是我正在寻找的 – Breixo

+1

@Amrosio:接下来要做的事情就是接受答案。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – tom10