안녕하세요 여러분 Xuan 형제입니다~ 친구가 tkinter 창에서 구성 요소의 데이터를 동적으로 표시하는 방법에 대해 비공개 메시지를 보냈습니다. 오늘은 두 가지 방법을 공유하겠습니다~
1. 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초마다 1씩 증가 할 수 있습니다 .
after 함수 구문: after(몇 밀리초 후에 함수가 호출됨)
그러나 창이 크고 구성 요소가 많은 경우 재귀를 너무 많이 사용하면 과도한 CPU 사용량이 발생합니다 . 이때는 멀티스레딩이 더 나은 방법이 됩니다.
2. 멀티스레딩
스레딩 라이브러리의 다중 스레드 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.Thread(대상=함수 호출됨)
3. 완전한 코드
방법 1:
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()
방법 2:
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()
모두에게 도움이 되길 바랍니다~