一、变量类别的基本简介
有些控件在执行时
会更改内容,例如,文本框(Entry),选项按钮(Radio button)等,选项按钮就是选择按钮,多选单选啥的
有些控件我们可以更改他们的内容,例如标签(Label)等,如果想要更改他们的内容,可以使用这些控件的参数,例如,textvariable
、variable
、onvalue
等
不过要将控件的参数以变量方式处理时,需要借助tkinter模块
内的变量类别
(Variable Classes)。
这个类别有4个子类别,每一个类别其实就是一个数据类型的构造方法,我们可以通过这4个子类别的数据类型将他们与控件相关的参数结合
- x =
Int
Var():整型
变量,默认是0 - x =
Double
Var():浮点型
变量,默认是0.0 - x =
String
Var():字符串
变量,默认是"" - x =
Boolean
Var():布尔型
变量,True是1,False是0
二、set() 方法
使用set()方法设置变量内容
import tkinter
# 控制显示的开关
msg = False
def click():
# 改变变量
global msg
if msg ==False:
msg = True
# 设置文字
x.set("Python!!!")
else:
msg = False
# 设置空
x.set("")
root = tkinter.Tk()
x = tkinter.StringVar()
# textvariable 是可变的,会跟随字符串变而自动变内容
label = tkinter.Label(root, textvariable=x, bg="lightyellow", fg="red", font="Verdana 18 bold", width=25, height=2)
label.pack()
button = tkinter.Button(root, text="请点击", command=click)
button.pack()
root.mainloop()
运行结果:
三、get() 方法
使用get()方法取得变量内容
我们可以用get()方法改良这个小程序
import tkinter
def click():
if x.get() == "":
x.set("Python!!!")
else:
x.set("")
root = tkinter.Tk()
x = tkinter.StringVar()
# textvariable 是可变的,会跟随字符串变而自动变内容
label = tkinter.Label(root, textvariable=x, bg="lightyellow", fg="red", font="Verdana 18 bold", width=15, height=2)
label.pack()
button = tkinter.Button(root, text="请点击", command=click)
button.pack()
root.mainloop()
运行结果:
四、追踪trace() 使用模式 w
我们可以利用变量设置追踪Widget
控件,当其内容发生改变时,让程序自动执行函数
例子
:
import tkinter
# 这里必须要加入*args,具体下面细说
def show(*args):
print("数据:", string.get())
root = tkinter.Tk()
string = tkinter.StringVar()
entry = tkinter.Entry(root, textvariable=string)
entry.pack(padx=5, pady=10)
string.trace("w", show)
root.mainloop()
运行结果:string.trace("w", show)
- 第一个参数是模式,w代表当有执行写入时,就自动去执行
show
函数 - 也可以自行取函数名称,这个动作称为
变动追踪
。
我们可以运用set和get方法使我们在窗口内实现同步显示
例子
:
import tkinter
def show(*args):
stringLabel.set(stringEntry.get())
print("数据:", stringEntry.get())
root = tkinter.Tk()
stringEntry = tkinter.StringVar()
entry = tkinter.Entry(root, textvariable=stringEntry)
entry.pack(padx=5, pady=10)
stringEntry.trace("w", show)
stringLabel = tkinter.StringVar()
label = tkinter.Label(root, textvariable=stringLabel)
stringLabel.set("同步显示")
label.pack(padx=5, pady=10)
root.mainloop()
运行结果:
五、追踪trace() 使用模式 r
我们也可以设计当控件内容被读取时,执行追踪并执行特定函数
例子
:
import tkinter
def show(*args):
Tr.set(Tw.get())
def getting(*args):
print("警告!!正在被读取数据")
def hit():
print("数据为:", Tw.get())
root = tkinter.Tk()
Tw = tkinter.StringVar()
entry = tkinter.Entry(root, textvariable=Tw)
entry.pack(padx=5, pady=10)
Tw.trace("w", show)
Tw.trace("r", getting)
Tr = tkinter.StringVar()
label = tkinter.Label(root, textvariable=Tr)
Tr.set("同步显示")
label.pack(padx=5, pady=10)
button = tkinter.Button(root, text="点击读取", command=hit)
button.pack(padx=5, pady=10)
root.mainloop()
运行结果:
Tw.trace("r", getting)
- 第一个参数是模式,r代表当有执行读取时,就自动去执行
getting
函数 - 也可以自行取函数名称,这个动作称为
读取追踪
。
六、trace() 方法调用的方法参数
def show(*args):
*args
其实是传递三个参数,分别是tk变量名称
、index索引
、mode模式
不过目前有关于tk变量名称
和index索引
部分尚未完成实际支持,第三个参数则可以列出是r
还是w
模式
由于我们所设计的程序并不需要传递参数,所以可以直接用*args
当做参数内容
例子
:
import tkinter
def show(name, index, mode):
stringLabel.set(stringEntry.get())
print("name = %r, index = %r, mode = %r" % (name, index, mode))
root = tkinter.Tk()
stringEntry = tkinter.StringVar()
entry = tkinter.Entry(root, textvariable=stringEntry)
entry.pack(padx=5, pady=10)
stringEntry.trace("w", show)
stringLabel = tkinter.StringVar()
label = tkinter.Label(root, textvariable=stringLabel)
stringLabel.set("同步显示")
label.pack(padx=5, pady=10)
root.mainloop()
运行结果:
这里解释一下
%r
%s
是将变量传到str()
函数中,结果是将变量转化适合人阅读的格式
%r
是将变量穿到repr()
函数中,结果是将变量转化成适合机器阅读的格式,可以将%r后的变量理解为一个对象
谢谢观看,笔者会持续更新,如有错误或者建议,请私信我
来源:CSDN
作者:qq_1471587327
链接:https://blog.csdn.net/qq_44168690/article/details/104770931