使用标准的“关闭”按钮关闭easygui Python脚本

时间:2008-12-16 23:52:47

标签: python user-interface tkinter easygui

我创建了一个非常的简单应用程序,它提供了一个easygui entrybox(),并在收到用户输入时继续无限循环。

我可以使用“取消”按钮退出程序,因为这会返回“无”,但我也希望能够使用标准的“关闭”按钮退出程序。 (即Windows窗口的右上角,Mac窗口的左上角)此按钮当前不执行任何操作。

看一下easygui模块,我找到了这一行:

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

这似乎是罪魁祸首。我不是TKinter专家,但我可能想出如何改变这个处理程序以我想要的方式行事。

但是,因为我不想搞乱easygui模块,有没有办法从我的主脚本覆盖这个行为,并且关闭按钮要么直接关闭程序还是返回None?

3 个答案:

答案 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频道,我会很快上传并发布链接:)