我正在做一個比較大的專案,但只用了幾行就成功地重現了我的問題:
import tkinter as tk
root = tk.Tk()
root.geometry('200x200')
def doStuff()。
pass
sv = tk.StringVar()
def callback():
print(E.get())
做事()
return True
E = tk.Entry(root, bg="white", fg="black", width=24, textvariable=sv, validate="key", validatecommand=callback)
E.grid(row=0, column=0, padx=30, pady=5, sticky=tk.E)
root.mainloop()
期望的輸出是,每次用戶改變這個Entrywidget中的條目時,都會呼叫一個函式。
這樣做很好,但使用E.get()回傳 "前一個 "條目,例如:
-entry is 'boo'
-E.get() 是'bo'
。
Python似乎在運行Callback() 之前就已經改變了Entry Widget。
uj5u.com熱心網友回復:
設計上的驗證發生在文本被插入或洗掉之前。為了使驗證作業順利進行,它必須能夠防止資料被改變。
如果你不做驗證,而只是想在值發生變化時呼叫一個函式,那么最好的方法就是在相關變數上設定一個跟蹤。
def callback(*args)。
print(E.get())
做事()
return True True
sv = tk.StringVar()
sv.trace_add("write"/span>, callback)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330603.html
標籤:
