Добавление виджета с помощью кнопки - wxPython - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь создать что-то вроде панели категорий в 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()

Моя проблема в том, что кнопка добавляется поверх предыдущей кнопки. Я весьма озадачен этим, потому что если я удаляю аргумент event функции add(), а затем вызываю его в методе __init__, self.add(), он работает нормально. Но это мне не помогает, потому что мне нужно добавлять виджеты, когда пользователь нажимает кнопку.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 03 августа 2011

Позвоните self.panel.Layout() после добавления кнопки.Эта функция вызывается автоматически, когда вы изменяете размер окна с дочерними элементами (попробуйте с текущим кодом), но не когда вы добавляете в него виджеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...