3

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

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

看一下easygui模块,我发现了这一行:

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

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

但是,由于我不想弄乱easygui模块,有没有办法从我的主脚本中覆盖这种行为,并让关闭按钮直接关闭程序或返回None?

4

3 回答 3

5

它需要改变 easygui 模块,是的。我会修改的!

** 我已向 EasyGUI 创建者发送了一封电子邮件,解释了这一点 [2009 年 1 月 23 日下午 12:12]

** 我只想说这种变化发生的可能性——如果有的话,我怀疑——非常小。你看,EasyGUI 旨在成为一种创建 GUI 的简单、离散的方式。我认为这个添加不会有任何帮助,特别是因为界面是非常连续的,所以它会让新用户感到困惑。[2009 年 1 月 23 日下午 12:19]

** EasyGUI 创建者在回复我的电子邮件时这样说:

easygui 对话框永远不应该退出应用程序——它应该将一个值传回给调用者并让调用者决定要做什么。

但这是一个有趣的想法。与简单地忽略单击“关闭”图标不同,easygui 框可以返回与单击“取消”按钮返回的值相同的值。我会思考这个。

——史蒂夫·弗格

我认为这至少是一种进步。[2:40 PM,2009 年 1 月 23 日]

于 2009-01-23T17:04:00.300 回答
0

我现在不知道,但你有没有尝试过这样的事情?:

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

或者

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

我没试过,但谷歌类似"Tkinter protocol WM_DELETE_WINDOW"

于 2008-12-17T00:24:29.373 回答
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 频道,我会尽快上传并在此处发布链接 :)

于 2016-01-19T22:16:44.587 回答