我有一个 tkinter 应用程序,其条目数量可变,我想检测内容的变化,特别是哪个条目已被更改
import tkinter as tk
from tkinter import ttk
DOGS = 3
def main() -> None:
root = tk.Tk()
root.title('')
root.geometry('400x400')
dogs = {}
entries = {}
for row in range(DOGS):
dogs[row] = tk.StringVar()
dogs[row].trace_add('write', dog_changed)
entries[row] = ttk.Entry(root, textvariable=dogs[row])
entries[row].grid(row=row, column=0)
root.mainloop()
def dog_changed(*args):
print(args)
if __name__ == '__main__':
main()
我可以在 args 中看到我将 StringVar 的名称作为字符串(例如“PY_VAR0”),但是有没有更优雅的方法来获取对已更改条目的引用,而不是在这里采用 substr。
我已经尝试过这个 lambda 函数,但它当然只显示行的当前值
dogs[row].trace_add('write', lambda *args: dog_changed(row, *args))
我不确定这是否有帮助,但您可以指定
name
您的StringVar
实例:打印结果如下:
您还可以在小部件本身上设置事件绑定
Entry
,例如'<Key>'
,当小部件内部按下某个键时,该事件将触发。然后,您可以从传递的事件中获取小部件的引用(如果您这样做,event
您可能甚至不需要绑定):trace
请注意,您不必
lambda
在这里使用 - 您可以将其绑定到函数;该函数只需要接受传入的event
参数。