2016-09-16 3 views
0

Я хочу динамически создавать и удалять страницы в ноутбуке. В основном классе я успешно создаю и добавляю страницы с помощью кнопки. Конечно, страницы - это отдельный класс, и внутри есть кнопка. Я знаю, что могу положить кнопку за пределы ноутбука и удалить их из основного класса, но я хочу использовать собственную кнопку страницы, чтобы самостоятельно разрушить всю страницу, поскольку она больше не понадобится.Self delete page in wx.Notebook

Извините, что не оставляю никаких кодов, но я отправляю с мобильного телефона. Также представляется, что вопрос не столь специфичен, чтобы требовать минимальный рабочий пример.

ответ

0

Как вы уже догадались, необходимо соблюдать осторожность при уничтожении объектов пользовательского интерфейса из собственных обработчиков событий. Мало того, что текущий обработчик событий все еще активен, но могут быть другие ожидающие события, которые все еще находятся в очереди, и если целевой объект был уничтожен при их доставке, вы можете получить сбой.

Лучшее, что нужно сделать, это отложить уничтожение до тех пор, пока не будут выполнены текущие и возможные обработчики обработанных событий, и нет ничего ожидающего, что это будет сделано для объекта пользовательского интерфейса, кроме уничтожения, которое вы хотите сделать. И лучший способ сделать это - использовать wx.CallAfter. Он вызывается функцией с параметрами, которые вы даете ей в следующий раз, когда цикл событий опустеет, поэтому неявно нет ничего другого, ожидающего выполнения или отправки объекту пользовательского интерфейса.

В вашем случае было бы безопасно делать такие вещи, как сразу же удалить страницу из ноутбука и скрыть окно страницы. Затем используйте wx.CallAfter для вызова некоторой функции (возможно, в классе ноутбука), которая вызывает метод Destroy окна страницы и выполняет любую другую очистку, которая необходима. Причина, по которой я предлагаю расщепить эти два набора задач, заключается не в том, что для вызова функции потребуется много времени, но в некоторых случаях она может быть достаточно длинной, чтобы мгновенно мерцать в переходном состоянии, поэтому внешний вид менее плавный для пользователей.