wx Python frame.isIconized - когда рамка действительно иконизирована? - PullRequest
0 голосов
/ 14 июля 2020

Недавно я начал немного жонглировать новейшим 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()

Что просто не работает - после сворачивания окно просто сворачивается, а не скрывается. При нажатии на кнопку приложения на системной панели задач для его восстановления приложение скрывается.

...