python - 每当 Tkinter 小部件值更改时如何运行代码?

标签 python events tkinter

我正在使用 Python 和 Tkinter,并且我想要来自其他工具包/语言的 onchange 事件的等效项。我想在用户更新某些小部件的状态时运行代码。

在我的例子中,我有很多 EntryCheckbuttonSpinboxRadiobutton 小部件。每当这些更改中的任何一个更改时,我都想运行我的代码(在这种情况下,更新另一个面板上的文本框)。

(请记住,用户可以使用鼠标或键盘与这些小部件进行交互,甚至可以使用 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).

For more info on tkinter variables check this out.

关于python - 每当 Tkinter 小部件值更改时如何运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876229/

相关文章:

python - Tkinter 干扰 OSX 上的 pygame(中止陷阱 6)

python - 是否可以阻止用户单击我的 tkinter 窗口以外的其他应用程序

javascript - jquery 等待多个完成事件

c++ - SDL 中的调度事件

Python Tkinter 类结构实践

python - Tkinter 字符串回调

python - HTTP 代理服务器 python [客户端帮助]

python - Django - 显示图像字段

Python Pandas Dataframe 仅添加负数条件

java - 将 CSV 导入 Jpanel 上的 JTable(无 CSVReader)