1 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
下面是 tkinter 的基本代碼,它使對(duì)話(huà)框在 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()
在給定時(shí)間后觸發(fā)一個(gè)函數(shù),即 3000 毫秒(3 秒),因此您也可以調(diào)整計(jì)時(shí)器。這只是一個(gè)示例,您可以根據(jù)需要進(jìn)行更多編輯。
為什么使用after()
而不是while
和計(jì)時(shí)器?
這是因?yàn)?code>while循環(huán)干擾了 tkintermainloop()
導(dǎo)致窗口無(wú)響應(yīng),所以不建議使用while
or?time.sleep()
。after()
相反,您也可以使用tkinter 的內(nèi)置方法threading
。
這里有更多內(nèi)容after()
:
它主要需要兩個(gè)位置參數(shù),
ms
并且func
ms
- 這是指定函數(shù)被觸發(fā)的時(shí)間(以毫秒為單位)。func
- 指定完成后觸發(fā)的函數(shù)ms
。
警告:?請(qǐng)記住,根窗口不會(huì)被破壞,它只是被隱藏,因此只要根窗口沒(méi)有被破壞,程序就會(huì)繼續(xù)在后臺(tái)運(yùn)行,因此您必須恢復(fù)該窗口并將其關(guān)閉任務(wù)結(jié)束。出于這個(gè)原因,我root.destroy()
在那里添加了。
添加回答
舉報(bào)