亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何停止等待 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 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號