tkinter-变量盒子-stringVar/intVar

因为python本身没有gui功能,收编的tkinter也只能使用比较别扭的方式来更新变量。下面这种方式已经是所有方式中最不别扭的了。

诸位可用.mainloop()方法来替代循环+update()方法,使用update方法的好处在于可以比较容易的嵌入你原有的程序中。

import tkinter as tk
import time

# -----------------------------------------------------------------------------------------------
# 创建窗口1
win_00 = tk.Tk()
win_00.title('Main')
win_00.geometry('400x300')

# 创建变量
txt_100 = tk.StringVar()
txt_100.set('old')

time_101 = 0
txt_101 = tk.StringVar()
txt_101.set(time_101)

status_100 = tk.IntVar()

# 创建动作


def change():
    if status_100.get() == 1:   # if clicked
        txt_100.set('new')
    else:
        txt_100.set('old')


# 创建标签
cb_100 = tk.Checkbutton(win_00, variable=status_100, command=change)
cb_100.pack()

lb_100 = tk.Label(win_00, textvariable=txt_100)
lb_100.pack()

lb_101 = tk.Label(win_00, textvariable=txt_101)
lb_101.pack()
# -----------------------------------------------------------------------------------------------
# 循环刷新窗口
while True:
    time_101 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 本地时间显示

    txt_101.set(time_101)
    win_00.update()

    time.sleep(0.05)

运行结果:

tkinter-变量盒子-stringVar/intVar_第1张图片

 

 单页面实现非常正常,但是我创建2个页面,就发现使用变量盒子做的标签无法显示,排查后得出结论:

  1. tkinter的变量盒子仅可支持在单一界面上显示,推测与其通讯实现方式有关;
  2. 如果一定要做多页面,需仅保持一个页面active,其余页面必须使用.destroy()方法销毁。

你可能感兴趣的:(python笔记簿,python)