使用按钮添加小部件 - wxPython

时间:2011-08-02 22:11:11

标签: python user-interface wxpython

我正在尝试使用wxPython创建像Wordpress中的类别面板。

我想弄清楚的是,当用户点击按钮时如何添加小部件(如“添加新类别”)

这是我的代码:

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()

我的问题是,按钮被添加到上一个按钮的顶部。我对此感到很神秘,因为如果我删除event函数的add()参数,然后在__init__方法self.add()中调用它,它就可以了。但这对我没有任何帮助,因为我需要在用户点击按钮时添加小部件。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

添加按钮后调用self.panel.Layout()。当您使用子项调整窗口大小时会自动调用此函数(使用当前代码尝试),但在向其添加小部件时则不会。