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

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

Я могу выйти из программы, используя кнопку «Отмена», поскольку она возвращает значение «Нет», но я также хотел бы иметь возможность использовать стандартную кнопку «закрыть» для выхода из программы. (т.е. в правом верхнем углу окна Windows, в верхнем левом углу окна Mac) Эта кнопка в настоящее время ничего не делает.

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

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
3 910
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

или же

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

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

что-то в этом роде, вероятно, сработает, но разве это не потребует изменения модуля easygui? На самом деле это может быть единственный способ сделать это, но мне интересно посмотреть, есть ли другой способ сделать это.

nakedfanatic 17.12.2008 04:19
Ответ принят как подходящий

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

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

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

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

An easygui dialog should never exit the application -- it should pass back a value to the caller and let the caller decide what to do.

But this is an interesting idea. Rather than simply ignoring a click on the "close" icon, easygui boxes could return the same value that a click on the "cancel" button would return. I'll meditate on this.

-- Steve Ferg

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

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

nakedfanatic 27.01.2009 23:20

Я нашел решение, ответ находится под полем выбора, когда он определяет некоторые функции (вы можете просто ввести, чтобы найти 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, я скоро загрузю его и опубликую ссылку здесь :)

Если вам нужен оптимизированный файл, я сделал его и разместил на gitHub Вот ссылка github.com/ProgrammingBR/easy-gui-WINDOWFIX, а это видео YT (видео упрощено, я оптимизировал его в созданный мной файл) youtube.com/watch?v=i67acTgFWIU

pietronardelli 20.01.2016 04:10

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