我正在使用 Python 和 Tkinter
,并且我想要来自其他工具包/语言的 onchange
事件的等效项。我想在用户更新某些小部件的状态时运行代码。
在我的例子中,我有很多 Entry
、Checkbutton
、Spinbox
和 Radiobutton
小部件。每当这些更改中的任何一个更改时,我都想运行我的代码(在这种情况下,更新另一个面板上的文本框)。
(请记住,用户可以使用鼠标或键盘与这些小部件进行交互,甚至可以使用 Ctrl+V 粘贴文本)
最佳答案
我认为正确的方法是在已分配给小部件的 tkinter 变量上使用 trace
。
例如……
import tkinter
root = tkinter.Tk()
myvar = tkinter.StringVar()
myvar.set('')
mywidget = tkinter.Entry(root,textvariable=myvar,width=10)
mywidget.pack()
def oddblue(a,b,c):
if len(myvar.get())%2 == 0:
mywidget.config(bg='red')
else:
mywidget.config(bg='blue')
mywidget.update_idletasks()
myvar.trace('w',oddblue)
root.mainloop()
trace 中的 w
告诉 tkinter 每当有人写入(更新)变量时,每次有人在 Entry 小部件中写入内容时都会发生这种情况,执行 oddblue
。跟踪总是将三个值传递给您列出的任何函数,因此您需要在函数中期待它们,因此 a,b,c
。我通常什么也不做,因为我需要的一切都是在本地定义的。据我所知,a
是变量对象,b
是空白(不知道为什么),c
是跟踪模式(即 w
).
关于python - 每当 Tkinter 小部件值更改时如何运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876229/