当前位置: 首页 > 知识库问答 >
问题:

一段时间后自动关闭窗口

商琛
2023-03-14

在一个类中,在一个函数中,我创建了一个Tkinter画布。这个函数正在被另一个类调用,我希望Tkinter窗口弹出30秒,然后自动关闭。我有电话

master.mainloop()
time.sleep(30)
master.destroy() 

但我犯了个错误

elf.tk.call('destroy',self.w)\u tkinter.TclError:无法调用“destroy”命令:应用程序已被销毁

那我怎么能让它自己关上呢?

共有2个答案

缪远航
2023-03-14

这里的问题是mainloop()在GUI关闭之前不会返回。

因此,在GUI关闭并销毁自身30秒后,您尝试销毁它。显然,这是失败的。

但是,不能只移动主代码循环内的<代码>睡眠和<代码>销毁< /代码>调用,因为如果在主循环的中间<代码>睡眠,GUI将冻结。

因此,您需要某种不会停止主循环的计时器。tkinter包含了用于该目的的后方法。这个答案给出了一个使用它的详细例子。

羊舌志
2023-03-14

不要使用时间。使用tkinter睡眠()。相反,在要关闭的小部件上调用函数after

这里是最简单的例子:

import tkinter as tk

w = tk.Tk()
w.after(30000, lambda: w.destroy()) # Destroy the widget after 30 seconds
w.mainloop()

 类似资料:
  • 我正在开发一个GUI,它允许用户决定是继续执行脚本还是终止脚本,但如果用户在15分钟内没有响应,我希望关闭窗口并自动执行脚本的其余部分。我用过根。函数中的destroy(),但它仅在用户响应时执行。 我尝试过在试用的基础上使用倒计时功能,但它不起作用,因为没有用户响应控制就不会进入倒计时功能。我有什么办法能完成这项任务吗?

  • 场景是:您在窗口(a)中,单击按钮/链接启动打印过程,然后打开一个新窗口(B),其中包含要打印的内容,打印对话立即显示,如果您单击窗口(B)的取消按钮,那么您应该可以再次打印,但当您单击窗口(B)的打印按钮打印时,您可以打印,但窗口(a)的按钮不能再次继续打印。给我一些解决方案…!!!在chrome,Firefox和internet explorer上工作

  • 我有带oauth2安全mySql数据库连接和一些控制器的Spring Boot应用程序。我已经在AWS服务器上部署了它,它工作得很好,但它在一段时间后关闭了,它没有得到很多API调用,所以没有理由DDOS失败或outOfMemmory错误,我可以在日志中看到以下消息 2018-10-28 10:58:55.979信息1253---[线程-3]ConfigServletWebServerApplic

  • 我们有HDP集群版本2.6.4和3 zookeeper服务器版本3.4.x 第一个 Zookeeper 服务器无法正常工作,并在一段时间后弯腰 从ambari GUI中,我们可以看到动物园断开了连接 从动物园管理员日志中我们可以看到以下内容: 当我们为动物园管理员进行测试时,我们得到了: 请注意,发送比我们从Received得到的要少得多 我们可以看到许多CLOSE-WAIT连接 为了尝试解决此问

  • 我正在JavaFX 2.0中制作一个应用程序。从我的主窗口开始一个带有一些设置的新窗口。调整完设置后,我想按一个像“保存更改”这样的按钮。 我想用这个按钮保存更改并关闭窗口。我所说的关闭意味着杀死它,而不是把它放在背景中或设置可见性。我读过关于方法阶段的书。关闭() http://docs.oracle.com/javafx/2.0/api/javafx/stage/Stage.html 正如您所

  • 在我的应用程序中,当我从后台回来时,我的活动会自动接近,并且它总是显示以前的活动。示例:我用活动A启动应用程序 }