在wxPython中添加带按钮的控件

0 投票
1 回答
2550 浏览
提问于 2025-04-16 22:45

我正在尝试用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()

我的问题是,新的按钮会叠加在之前的按钮上。我对此感到很困惑,因为如果我删除add()函数中的event参数,然后在__init__方法中调用它,self.add(),那样就能正常工作。但这对我没有帮助,因为我需要在用户点击按钮时添加小部件。

任何帮助都非常感谢。

1 个回答

1

在添加按钮之后,记得调用 self.panel.Layout() 这个函数。这个函数会在你调整窗口大小时自动被调用(你可以试试你现在的代码),但是在你往窗口里添加控件时,它不会自动调用。

撰写回答