tkinter应知应会(三):关联变量

关联变量是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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值