tkinter应知应会(三):关联变量
程序员文章站
2022-03-06 18:57:16
...
关联变量是tkinter里一个挺反人性的知识点。关联变量长得像变量,但是非常神奇的是,你不能用“顺序结构”或者“循环结构”来理解它。怎么说呢,它有点像一个突破了物理定律和因果定律的存在。
简单来讲就是:一个后面发生的事情,会影响之前的发生的事情(是不是有点科幻了)
1,先贴上代码,具体讲解放后面:
# 制作一个每次点击就显示当前时间的按钮
import tkinter as tk
import time
root = tk.Tk()
var = tk.StringVar() # 设置关联变量的类型为字符串
var.set('什么都没发生') # 对关联变量进行初始化设定
def check():
now = time.strftime('%y%m%d%H%M%S')
var.set(now)
label = tk.Label(root,textvariable=var)
label.pack()
button = tk.Button(root,text='点击获取当前时间',command=check)
button.pack()
root.mainloop()
说一下这段代码的思路:
1,首先,建立一个label,用来显示时间信息
2,在label中的信息,是不断变化的,因为时间在不断变化。所以我们不能使用text参数,而应该使用textvariable参数,该参数可以指向一个关联变量。当这个关联变量发生变动时,label里的信息自动跟着变。
3,我们定一个函数:check,用来获取最新的时间信息
4,这个check()函数每被调用一次,就会看一下最新的时间是什么时候,并重置一下关联变量var
5,最后,我们用一个button控件,来操作这个ckeck函数
之所以说这个关联变量有点奇葩,是因为这段代码里,有三组黑*在影响他。
1,初始化设定的时候,设定了var的值
2,label调用了var
3,button通过def check(),在修改var的值
so,一个简单的功能,居然需要这么多代码,而且逻辑关系有点错综复杂了。后面我们会遇到更复杂的情况。
为师会尽可能只用“最少的知识”,实现最丰富的功能。所以千万不要误解了tkinter的复杂程度。
2,用一个按钮实现代码状态的切换
# 一个按键实现状态变化
import tkinter as tk
root = tk.Tk()
var = tk.StringVar()
var.set('开始')
label = tk.Label(root,textvariable=var)
label.pack()
hit = 1 # 设定初始状态
def hit_me():
global on_hit
if hit==1: # 根据状态进行调整
hit = 2
var.set('2')
else:
hit = 1
var.set('1')
print(hit)
button = tk.Button(root,text='点击',height=2, command=hit_me)
button.pack()
root.mainloop()
上一篇: 超级产品:利用数据分析勾勒出的用户画像,你躺枪了几条?
下一篇: 成功的超级产品来源于这5大方面!