В настоящее время я пытаюсь перенести приложение wxPython 2.8 на новый wxPython 4.

Одна проблема, с которой я сталкиваюсь, заключается в следующем:

У нас есть один фрейм с дюжиной панелей внутри ноутбука, у некоторых панелей есть ноутбуки, настройка всех этих панелей занимает довольно много времени. Поскольку большинство пользователей будут использовать только подмножество панелей, мы инициализируем все панели как пустые панели, а затем, когда пользователь нажимает на вкладку, ему приходится немного подождать, пока все элементы будут размещены на панели.

С wx2.8 это не было проблемой, когда пользователь нажимал на одну из этих вкладок, все приложение перестало отвечать. Когда панель была инициализирована и макет был закончен, панель была показана пользователю.

Однако с новым wx4 новая панель сразу становится видимой, и пользователь может «наблюдать» за созданием панели и видеть, как макет перемещается назад и вперед.

Итак, мой вопрос:

Есть ли способ эффективно остановить обновление / отрисовку WX-приложения, пока сборка панели не будет завершена?

Код "фиктивной панели":

class MyPanel(wx.Panel)
    def _createIfNotCreated(self):
        if self.is_created:
            return
        self.makeComponents()
        self.layoutComponents()
        self.is_created=1

    def notifyDisplay(self):
        self._createIfNotCreated()
        self.refresh()

    def makeComponents(self):
        self._t = StaticText(self, ...)
        [... lots of text, views, etc]

    def layoutComponents(self):
        sizer = BoxSizer(...)
        sizer.Add(...)
        [... etc...]
        self.setSizer(sizer)
        self.setAutoLayout(1)
        sizer.fitSizer(self)

0
Anaconda