Недавно я начал немного жонглировать новейшим wx Python 4. Я пытаюсь реализовать некоторые базовые c функции и обнаружил странный случай - а может, чего-то не понимаю. В документации (https://wxpython.org/Phoenix/docs/html/wx.IconizeEvent.html) говорится, что IsIconized
method
Возвращает True, если фрейм был уменьшен в виде значка, False, если он был восстановлен.
Хорошо, я понимаю, что EVT_ICONIZE
отправляется как при свертывании, так и при восстановлении, но я не понимаю значения возвращаемого значения IsIconized
. Некоторый код:
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title)
self.Bind(wx.EVT_ICONIZE, self.on_iconify)
def on_iconify(self, e):
print('start ' + str(self.IsIconized()))
if self.IsIconized():
self.Hide()
print('end ' + str(self.IsIconized()))
Если я минимизирую окно, полученное из приведенного выше кода:
start True
end True
start False
И теперь окно приложения скрыто (что хорошо), но почему событие генерируется два раза - первый раз, когда я свернул окно (щелкнул элемент управления свертыванием в строке заголовка приложения) и второй раз после Hide()
? Так что насчет IsIconized()
возвращаемых значений? Он сообщает мне, является ли фрейм иконкой или, как говорится в документации, был иконкой до / во время / после генерации события?
Для увеличения странности: в нескольких примерах, которые я обнаружил (также на SO) метод, привязанный к EVT_ICONIZE
, выглядит примерно так:
def on_iconify(self, e):
if not self.IsIconized():
self.Hide()
Что просто не работает - после сворачивания окно просто сворачивается, а не скрывается. При нажатии на кнопку приложения на системной панели задач для его восстановления приложение скрывается.