Tkinter 变量追踪trace()使用r模式
Tkinger 变量追踪trace()使用w模式介绍了当Widget控件内容更改时,执行追踪并执行特定函数,其实我们也可以设计当控件内容被读取时,执行追踪并执行特定函数。
Tkinter 变量追踪trace()使用r模式 示例1
增加一个Read
按钮,当在Entry中输入数据时Python Shell窗口不显示数据,但是下方的Label将同步显示。主要功能是如果单击了“读取”按钮,系统将发出数据被读取的警告,同时输出所读取的数据。
from tkinter import *
def callbackW(*args): # 内容被更改时执行
# xE.get()
xL.set(xE.get()) # 更改标签内容
def callbackR(*args): # 内容被读取时执行
print("Warning:Data is read!")
def hit(): # 读取数据
print("Read the data:",xE.get())
# print("Type is:",type(xE.get())) # 类型是: <class 'str'>
# print("Read the data2:",xE.get())
# print("Read the data3:",xE.get())
# def callback(*args): # 如果是 def callback(): 则会出错
# xL.set(xE.get())
# print("data changed: ",xE.get()) # 在命令行输出当前内容
root = Tk()
root.title("apidemos.com") # 窗口标题
xE = StringVar() # Entry的变量内容
entry = Entry(root,textvariable=xE) # 设定Label内容是变量x
entry.pack(pady=5,padx=10)
xE.trace("w",callbackW) # 若是有更改执行callbackW
xE.trace("r",callbackR) # 若是有被读取执行callbackR
xL = StringVar() # Label的变量内容
label = Label(root,textvariable=xL)
xL.set("Synchronized display")
label.pack(pady=5,padx=10)
btn = Button(root,text="Read",command=hit) # 创建"读取"按钮
btn.pack(pady=5)
root.mainloop()
Output:
若单击Read
按钮可以在Python Shell窗口中看到下列执行结果。
上述程序的重点是第28行,内容如下。
xE.trace("r",callbackR) # 若是有被读取执行callbackR
上述第一个参数是模式,r代表当执行读取时,就自动去执行callbackR函数。也可以自行取函数名称,这个动作称为读取追踪。我们可以通过xE变量类别追踪Widget控件内容被读取时执行的特定动作,本实例是在Python Shell窗口输出“Warning:数据被读取!”和Entry中的内容。