【问题标题】:Python - Could not Exit from Tkinter using Menu.quitPython - 无法使用 Menu.quit 从 Tkinter 退出
【发布时间】:2018-10-02 19:45:29
【问题描述】:

我目前正在学习 python tkinter,并且遇到了关于使用显式代码退出 tkinter 窗口的问题。 到目前为止,这是我的代码(我已将其简化为仅关注问题)

from tkinter import *

def DoSomething():
    pass

root = Tk()
men = Menu(root)
root.config(menu = men)
submenu = Menu(men)
men.add_cascade(label = "File",menu = submenu)

submenu.add_command(label = "quit",command = Menu.quit)#Window does not close when user clicks "quit",
                                                       it just 
                                                       stays there non-responding

root.mainloop()

对此的任何帮助表示赞赏。 谢谢

【问题讨论】:

  • Menu 是一个 class - 它对构成应用程序的实际对象一无所知,因此它几乎无法告诉它们关闭。 men.quit 可能确实有效,因为您现在正在与一个实际的小部件交谈,但它仍然很奇怪:它不是您要关闭的菜单,而是整个窗口。试试root.quit 作为命令。
  • 谢谢,我试试看。

标签: python-3.x user-interface tkinter


【解决方案1】:

在 python tkinter 中,你应该使用 'destroy' 方法来摆脱 tkinter 窗口,即:

submenu.add_command(label="quit",command=root.destroy)

在你的情况下。

【讨论】:

  • 谢谢,效果很好。虽然,我想知道quitdestroy 之间有区别吗?
  • quit() 停止 TCL 解释器。在大多数情况下,这是您想要的,因为您的 Tkinter 应用程序也会停止。这可能是一个问题,如果你例如从空闲状态调用您的应用程序。 idle 本身就是一个 Tkinker 应用程序,因此如果您在应用程序中调用 quit() 并且 TCL 解释器被终止,idle 也将终止(或混淆)。 destroy() 只是终止主循环并删除所有小部件。因此,如果您从另一个 Tkinter 应用程序调用您的应用程序,或者如果您有多个主循环,它似乎更安全。" 取自 daniweb.com/forums/thread66698.html
猜你喜欢
  • 2012-12-21
  • 1970-01-01
  • 2019-10-04
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多