Самостоятельно удалить страницу в wx.Notebook
Я хочу динамически создавать и удалять страницы в блокноте. В основном классе я успешно создаю и добавляю страницы с помощью кнопки. Страницы, конечно же, представляют собой отдельный класс и имеют внутри кнопку. Я знаю, что могу поставить кнопку за пределами блокнота и удалить их из основного класса, но я хочу использовать собственную кнопку страницы, чтобы самоуничтожить всю страницу, так как она больше не понадобится.
Извините, я не отправляю код, но я пишу со своего мобильного телефона. Также кажется, что вопрос не настолько специфичен, чтобы нуждаться в минимальном рабочем примере.
1 ответ
Как вы уже догадались, нужно соблюдать осторожность при удалении объектов пользовательского интерфейса из их собственных обработчиков событий. Мало того, что текущий обработчик событий все еще активен, но могут быть и другие ожидающие события, которые все еще находятся в очереди, и если целевой объект был уничтожен при доставке, вы можете получить сбой.
Лучше всего отложить уничтожение до тех пор, пока не будут завершены текущие и возможные ожидающие обработчики событий, и на объекте пользовательского интерфейса ничего не ждет, кроме уничтожения, которое вы хотите выполнить. И лучший способ сделать это - использовать wx.CallAfter
, Он вызовет функцию с параметрами, которые вы передадите ей в следующий раз, когда цикл событий опустошится, так что неявно больше ничего не ждет, чтобы быть выполненным или отправленным в рассматриваемый объект пользовательского интерфейса.
В вашем случае было бы безопасно сделать такие вещи, как немедленное удаление страницы из блокнота и скрытие окна страницы. Тогда используйте wx.CallAfter
вызвать некоторую функцию (возможно, в классе ноутбука), которая вызывает окно страницы Destroy
метод и делает любую другую очистку, которая необходима. Причина, по которой я предлагаю разделить эти два набора задач, заключается не в том, что для вызова функции потребуется много времени, но в некоторых случаях она может быть достаточно долгой, чтобы на мгновение мигнуть в переходном состоянии, поэтому внешний вид менее плавный для пользователи.