欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()