为了账号安全,请及时绑定邮箱和手机立即绑定

如何停止等待 tkinter 对话框中的输入?

如何停止等待 tkinter 对话框中的输入?

LEATH 2023-07-27 16:09:48
我目前正在编写一个程序,该程序将执行某些操作(例如不断计数),直到将某些内容输入到显示的对话框中。但是,每当我尝试这样做时,程序都会在等待输入时冻结,因此在我尝试在后台运行的计数过程中不会取得任何进展。有没有办法让计时器在后台连续运行,以便在 5 分钟内,计数器立即停止并且对话框消失?这是我的代码的基本框架。我使用 tkinter 对话框进行输入,并尝试创建一个在后台运行的计时器。from time import *from tkinter import *from tkinter import messageboxfrom tkinter import simpledialogwhile timer<300:    sleep(1)    timer += 1    ROOT = Tk()    ROOT.withdraw()    USER_INP = simpledialog.askstring(title="Code Required",                                      prompt="What's the Code?:")最好没有外部模块,但如果没有也没关系。提前致谢 :)这是请求的代码  from tkinter import *  from tkinter import simpledialog  root = Tk()  root.withdraw()  def ask():      simpledialog.askstring(title="Code Required",                                        prompt="What's the Code?:")  ##    root.after(5000, root.destroy()) #added in the root.after() to try        and terminate it after set time  root.after(3000,ask) #triggers ask() after 3000 ms(3 seconds)  root.after(100000, root.destroy()) # tried to wait 10 seconds before it breaks but this doesn't show the dialog box any more  root.mainloop()
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

下面是 tkinter 的基本代码,它使对话框在 5 秒后弹出。


from tkinter import *

from tkinter import simpledialog


root = Tk()

root.withdraw()


def ask():

    simpledialog.askstring(title="Code Required",

                                    prompt="What's the Code?:")

    root.after(5000, root.destroy) #added in the root.after() to try and terminate it after set time


root.after(3000,ask) #triggers ask() after 3000 ms(3 seconds)

#root.after(10000, root.destroy) # tried to wait 10 seconds before it breaks but this doesn't show the dialog box any more

root.mainloop()

这里after()在给定时间后触发一个函数,即 3000 毫秒(3 秒),因此您也可以调整计时器。这只是一个示例,您可以根据需要进行更多编辑。

为什么使用after()而不是while和计时器?

这是因为while循环干扰了 tkintermainloop()导致窗口无响应,所以不建议使用whileor time.sleep()after()相反,您也可以使用tkinter 的内置方法threading

这里有更多内容after()

  • 它主要需要两个位置参数,ms并且func

  • ms- 这是指定函数被触发的时间(以毫秒为单位)。

  • func- 指定完成后触发的函数ms

警告: 请记住,根窗口不会被破坏,它只是被隐藏,因此只要根窗口没有被破坏,程序就会继续在后台运行,因此您必须恢复该窗口并将其关闭任务结束。出于这个原因,我root.destroy()在那里添加了。

查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信