2011-08-02 11 views
0

私はwxPythonを使って、Wordpressのカテゴリパネルのようなものを作成しようとしています。私が把握しようとしている何ボタン付きウィジェットを追加する - wxPython

、ユーザーが(「新しいカテゴリの追加」のような)ボタンをクリックしたときにウィジェットを追加する方法である

ここに私のコードです:

import wx 

class MainWindow(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(300,200)) 

     self.panel = wx.Panel(self, -1) 

     button = wx.Button(self.panel,-1,"Button") 

     self.vbox = wx.BoxSizer(wx.VERTICAL) 
     self.vbox.Add(button) 

     add_btn = wx.Button(self.panel,-1,"Add") 
     add_btn.Bind(wx.EVT_BUTTON, self.add) 

     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     hbox.Add(add_btn) 

     main_vbox = wx.BoxSizer(wx.VERTICAL) 
     main_vbox.Add(self.vbox) 
     main_vbox.Add(hbox) 

     self.panel.SetSizer(main_vbox) 

     self.Centre() 
     self.Show(True) 

    def add(self,event): 
     self.vbox.Add((wx.Button(self.panel,-1,"Button"))) 

if __name__ == "__main__": 
    app = wx.App() 
    MainWindow(None, -1, 'Add a Button') 
    app.MainLoop() 

私は、問題は、ボタンが前のボタンの上に追加されることです。私はadd()関数のevent引数を削除して__init__メソッドself.add()で呼び出すと、それはうまく動作するので、私はむしろ謎に包まれています。しかし、ユーザーがボタンをクリックしたときにウィジェットを追加する必要があるため、これは私には役に立たない。

ご迷惑をおかけして申し訳ありません。

答えて

0

ボタンを追加した後にself.panel.Layout()に電話してください。この関数は、ウィジェットをウィジェットに追加したときではなく、子を持つウィンドウのサイズを変更すると自動的に呼び出されます(現在のコードで試してみてください)。

+0

これは機能しました。本当にありがとう! –

関連する問題