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

我目前正在编写一个程序,该程序将执行某些操作(例如不断计数),直到将某些内容输入到显示的对话框中。


但是,每当我尝试这样做时,程序都会在等待输入时冻结,因此在我尝试在后台运行的计数过程中不会取得任何进展。


有没有办法让计时器在后台连续运行,以便在 5 分钟内,计数器立即停止并且对话框消失?这是我的代码的基本框架。我使用 tkinter 对话框进行输入,并尝试创建一个在后台运行的计时器。


from time import *

from tkinter import *


from tkinter import messagebox


from tkinter import simpledialog


while 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()


LEATH
浏览 146回答 1
1回答

湖上湖

下面是 tkinter 的基本代码,它使对话框在 5 秒后弹出。from tkinter import *from tkinter import simpledialogroot = 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 timeroot.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 moreroot.mainloop()这里after()在给定时间后触发一个函数,即 3000 毫秒(3 秒),因此您也可以调整计时器。这只是一个示例,您可以根据需要进行更多编辑。为什么使用after()而不是while和计时器?这是因为while循环干扰了 tkintermainloop()导致窗口无响应,所以不建议使用whileor time.sleep()。after()相反,您也可以使用tkinter 的内置方法threading。这里有更多内容after():它主要需要两个位置参数,ms并且funcms- 这是指定函数被触发的时间(以毫秒为单位)。func- 指定完成后触发的函数ms。警告: 请记住,根窗口不会被破坏,它只是被隐藏,因此只要根窗口没有被破坏,程序就会继续在后台运行,因此您必须恢复该窗口并将其关闭任务结束。出于这个原因,我root.destroy()在那里添加了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python