我想在視窗的主回圈旁邊運行一個函式。我有這個代碼:
from tkinter import *
window = Tk()
def task():
print("hello")
window.after(1000, task)
window.after(1000, task)
window.mainloop()
此代碼每秒列印一次“hello”。如果我task像這樣向函式添加引數:
from tkinter import *
window = Tk()
def task(arg):
print("hello")
window.after(1000, task(0))
window.after(1000, task(0))
window.mainloop()
在顯示此錯誤訊息之前,該函式會立即執行:
RecursionError: maximum recursion depth exceeded while calling a Python object
是否不能在after方法中使用帶有引數的回呼函式?
奇怪的是,官方 API 站點上似乎沒有關于此方法的檔案。
uj5u.com熱心網友回復:
發生這種情況是因為 task(0) 實際上是在呼叫自身,而不是像在第一個代碼中那樣傳遞要呼叫的函式的名稱,而是傳遞一個運算式,該運算式以 0 作為引數呼叫函式任務,并且當這種情況發生時,函式會呼叫自身一次又一次,因為在函式呼叫內部,您使用相同的運算式再次呼叫它,這種情況會發生,直到遞回呼叫的 python 達到最大深度(我認為它是 1000)。
如果你想傳遞一個引數,一個解決方案是使用這樣的 lambda 運算式:
window.after(1000, lambda:task(0))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407812.html
標籤:
下一篇:獲取樹視圖選擇發生的順序?
