我创建了一个非常的简单应用程序,它提供了一个easygui entrybox(),并在收到用户输入时继续无限循环。
我可以使用“取消”按钮退出程序,因为这会返回“无”,但我也希望能够使用标准的“关闭”按钮退出程序。 (即Windows窗口的右上角,Mac窗口的左上角)此按钮当前不执行任何操作。
看一下easygui模块,我找到了这一行:
root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )
这似乎是罪魁祸首。我不是TKinter专家,但我可能想出如何改变这个处理程序以我想要的方式行事。
但是,因为我不想搞乱easygui模块,有没有办法从我的主脚本覆盖这个行为,并且关闭按钮要么直接关闭程序还是返回None?
答案 0 :(得分:5)
这需要改变easygui模块,是的。我会修改它!
**我已经发送电子邮件给EasyGUI创建者解释了这个[12月12日下午12点12分]
**我只想说这种变化发生的可能性 - 如果有的话,我怀疑 - 是非常微小的。您看,EasyGUI旨在成为创建GUI的简单,离散的方式。我认为这种添加对任何一种都没有帮助,特别是因为界面是非常顺序的,所以它会让新用户感到困惑。 [2009年1月23日12:19]
** EasyGUI创建者在回复我的电子邮件时说:
easygui对话框永远不会退出 应用程序 - 它应该传回来 一个值给调用者并让 来电者决定做什么。
但这是一个有趣的想法。 而不是简单地忽略点击 “关闭”图标,easygui盒子可以 返回与单击相同的值 “取消”按钮将返回。 我会冥想这个。
- Steve Ferg
我认为至少这是进步。 [2009年1月23日下午2:40]
答案 1 :(得分:0)
我现在不知道,但你尝试过这样的事吗?:
root.protocol('WM_DELETE_WINDOW', self.quit)
或
root.protocol('WM_DELETE_WINDOW', self.destroy)
我没有尝试,但谷歌像"Tkinter protocol WM_DELETE_WINDOW"
答案 2 :(得分:0)
我找到了一个解决方案,答案在选择框下面,当他定义了一些函数时(你可以键入以查找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频道,我会很快上传并发布链接:)