Закройте скрипт Python easygui с помощью стандартной кнопки «Закрыть» - PullRequest
3 голосов
/ 17 декабря 2008

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

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

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

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

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

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

Ответы [ 3 ]

5 голосов
/ 23 января 2009

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

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

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

** Создатель EasyGUI сказал это в ответ на мой e-mail:

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

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

- Стив Ферг

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

0 голосов
/ 20 января 2016

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

0 голосов
/ 17 декабря 2008

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

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

или

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

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

...