Закройте скрипт easygui на Python с помощью стандартной кнопки "Закрыть"

StackOverflow https://stackoverflow.com/questions/373212

Вопрос

Я создал очень простое приложение, которое представляет easygui entrybox() и продолжает выполнять цикл до бесконечности по мере получения пользовательского ввода.

Я могу выйти из программы, используя кнопку "Отмена", поскольку это возвращает None, но я также хотел бы иметь возможность использовать стандартную кнопку "Закрыть" для выхода из программы.(то есть.в правом верхнем углу окна Windows, в левом верхнем углу окна Mac) В настоящее время эта кнопка ничего не делает.

Взглянув на модуль easygui, я нашел эту строку:

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

Казалось бы, это и есть виновник.Я не эксперт по TKinter, но я, вероятно, мог бы придумать, как изменить этот обработчик, чтобы он действовал так, как я хочу.

Однако, поскольку я бы предпочел не связываться с модулем easygui, есть ли способ переопределить это поведение из моего основного скрипта и заставить кнопку закрыть либо сразу закрыть программу, либо вернуть None?

Это было полезно?

Решение

Да, для этого потребовалось бы изменить модуль easygui.Я добьюсь, чтобы это было изменено!

** Я отправил электронное письмо создателю EasyGUI с объяснением этого [12:12, 23/09 января]

** Я просто хочу сказать, что вероятность того, что это изменение произойдет - если произойдет вообще, в чем я сомневаюсь, - очень мала.Видите ли, EasyGUI задуман как простой, дискретный способ создания графических интерфейсов.Я думаю, что это дополнение ничем бы не помогло, тем более что интерфейс очень последовательный, так что это могло бы сбить с толку новых пользователей.[12:19 вечера, 23/09 января]

** Создатель EasyGUI сказал это в ответ на мое электронное письмо:

Диалоговое окно easygui никогда не должно завершаться приложение - оно должно передать обратно значение вызывающему и позволить вызывающему решить, что делать. вызывающий решает, что делать.

Но это интересная идея.Вместо того, чтобы просто игнорировать нажатие на значок "закрыть", поля easygui могли бы возвращать то же значение, что и нажатие на возвращала бы кнопка "Отмена".Я буду медитировать над этим.

-- Стив Ферг

Я думаю, что это, по крайней мере, прогресс.[14:40 вечера, 23/09 января]

Другие советы

Прямо сейчас я не знаю, но вы пробовали что-нибудь подобное?:

root.protocol('WM_DELETE_WINDOW',  self.quit)

или

root.protocol('WM_DELETE_WINDOW',  self.destroy)

Я не пробовал, но погуглите что-то вроде "Tkinter protocol WM_DELETE_WINDOW"

Я нашел решение, ответ находится под полем выбора, когда он определяет некоторые функции (вы можете просто ввести, чтобы найти denyWindowManagerClose) и перейти туда, где он это определяет.Просто сотрите его и поместите этот код на его место.

    def denyWindowManagerClose():
#------------------------------------------------------------------
#  Changed by ProgrammingBR
#  Enables the user to close the window without entering a value
#  Youtube URL: https://www.youtube.com/channel/UCTZh6kWz_iYACNE6Jcy2lhw
#------------------------------------------------------------------
    global __enterboxText
    __enterboxText = None
    boxRoot.quit()

Вы можете создать файл резервной копии, но это будет работать для всех ящиков, приведенные здесь предложения, кроме этого, не будут работать, я попробовал их.если вы хотите посмотреть, у меня есть видео об этом (оно на португальском, но вы можете подписаться на него), просто зайдите на канал YouTube, я скоро загружу его и опубликую ссылку здесь :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top