Python tkinter:动态显示信息的两种方式「最详细解答」

各位好,我是轩哥啊哈~ 有小伙伴私信我如何让tkinter窗口上的元件内的数据实现动态显示,今天分享两种方法~


一、after()函数

如果你的窗口元件较少,使用tkinter内置的after()函数并使用一个递归,就可以实现动态显示。

示例:

def update():
    global i
    i += 1
    label1['text'] = str(i)
    label1.after(1000, update)

label1 = tk.Label(root, text='0', width=10)
label1.pack()
label1.after(1000, update)

这样就可以实现label1中的数字每秒增加1

after函数语法:after(几毫秒后, 调用的函数)

但是,如果你的窗口庞大,元件较多,使用过多的递归会导致CPU占用过大。这时候,多线程就成为了更好的方法。


二、多线程

使用threading库的多线程Thread(),可以实现动态显示:

i = 0

def update():
    global i
    while True:
        i += 1
        label1['text'] = str(i)
        time.sleep(1)

label1 = tk.Label(root, text='0', width=10)
label1.pack()

update_thread = threading.Thread(target=update)
update_thread.start()

这样也可以实现label1中的数字每秒增加1

threading语法:threading.Thread(target=调用的函数)


三、完整代码


方法一:

import tkinter as tk

i = 0

def update():
    global i
    i += 1
    label1['text'] = str(i)
    label1.after(1000, update)

root = tk.Tk()
root.title("动态显示")

label1 = tk.Label(root, text='0', width=10)
label1.pack()
label1.after(1000, update)

root.mainloop()

方法二:

import time
import threading
import tkinter as tk

i = 0

def update():
    global i
    while True:
        i += 1
        label1['text'] = str(i)
        time.sleep(1)

root = tk.Tk()
root.title("动态显示")

label1 = tk.Label(root, text='0', width=10)
label1.pack()

update_thread = threading.Thread(target=update)
update_thread.start()

root.mainloop()

希望对大家有帮助~

猜你喜欢

转载自blog.csdn.net/Xuange_Aha/article/details/128542277