Я создал простое приложение очень, которое представляет easygui entrybox () и продолжает бесконечно повторять его по мере получения пользовательского ввода.
Я могу выйти из программы, используя кнопку «Отмена», поскольку она возвращает значение «Нет», но я также хотел бы иметь возможность использовать стандартную кнопку «закрыть» для выхода из программы. (т.е. в правом верхнем углу окна Windows, в верхнем левом углу окна Mac) Эта кнопка в настоящее время ничего не делает.
Взглянув на модуль easygui, я обнаружил эту строку:
root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )
Казалось бы, в этом виноват. Я не эксперт по TKinter, но, вероятно, смогу придумать, как изменить этот обработчик, чтобы он действовал так, как я хочу.
Однако, поскольку я бы предпочел не возиться с модулем easygui, есть ли способ переопределить это поведение из моего основного скрипта и заставить кнопку закрытия либо закрыть программу полностью, либо вернуть None?






Я не знаю прямо сейчас, но пробовали ли вы что-то подобное ?:
root.protocol('WM_DELETE_WINDOW', self.quit)
или же
root.protocol('WM_DELETE_WINDOW', self.destroy)
Не пробовал, но погуглит что-то вроде "Tkinter protocol WM_DELETE_WINDOW"
Да, для этого потребуется изменить модуль 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 г.]
Это отлично. Я не думал, напишу ли по электронной почте создателю! Я согласен с тем, что кнопка закрытия не должна полностью закрывать программу, но было бы неплохо, если бы она отражала поведение кнопки отмены.
Я нашел решение, ответ находится под полем выбора, когда он определяет некоторые функции (вы можете просто ввести, чтобы найти 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
что-то в этом роде, вероятно, сработает, но разве это не потребует изменения модуля easygui? На самом деле это может быть единственный способ сделать это, но мне интересно посмотреть, есть ли другой способ сделать это.