Tkinger 变量追踪trace()使用w模式
了解Tkinter 变量 get()与set()的变量设置后,我们可以利用变量设置追踪Widget控件,当其内容更改时,让程序执行callback函数。
Tkinger 变量追踪trace()使用w模式 示例1
设计当Widget控件Entry内容改变时在Python Shell窗口中输出apidemos.com
。
from tkinter import *
def callback(*args): # 如果是 def callback(): 则会出错
print("data changed: ",xE.get()) # 在命令行输出当前内容
root = Tk()
root.title("apidemos.com") # 窗口标题
xE = StringVar() # Entry的变量内容
entry = Entry(root,textvariable=xE)
entry.pack(pady=5,padx=10)
xE.trace("w",callback) # 若有更改则执行callback
root.mainloop()
输出:
当看到上述窗口输出时,同时可以在Python Shell窗口中同步看到下列输出。
上述程序的重点是第12行,内容如下。
xE.trace("w",callback) # 若有更改则执行callback
上述第一个参数是模式,w代表当有执行写入时,就自动去执行callback函数。也可以自行取函数名称,这个动作称为变动追踪。我们可以通过xE变量类别追踪Widget控件内容的改变时执行特定动作,本实例是在Python Shell窗口中输出Entry的内容。上述程序的另一个重点是第4行,内容如下。
def callback(*args):
后面的课程将说明上述*args
参数的含义。
Tkinger 变量追踪trace()使用w模式 示例2
扩充上述实例,同时在Entry控件下方建立Label控件,当在Entry中有输入时,同时在下方的Label控件中显示。
from tkinter import *
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)
entry.pack(pady=5,padx=10)
xE.trace("w",callback) # 若有更改则执行callback
xL = StringVar()
label = Label(root,textvariable=xL)
xL.set("Synchronized display")
label.pack(pady=5,padx=10)
root.mainloop()
输出:
当看到上述窗口输出时,同时可以在Python Shell窗口中看到下列输出。