비슷한 질문을 몇 가지 읽었지만 대답이 없다고 생각합니다.
GUI에서 "실행"버튼을 클릭 한 후 10까지 세는 기본 코드가 있습니다.
from tkinter import *
from time import sleep
def count_to_10():
for i in range(1,11):
sleep(0.5)
print(i)
counter_label.after(0, counter_label.config(text=i))
return
def GUI():
root = Tk()
run_button = Button(root, text="run", command=count_to_10)
run_button.pack()
global counter_label
counter_label = Label(root, text="counter")
counter_label.pack()
root.mainloop()
GUI()
함수 counter_label
에서 반복 할 때마다 텍스트가 1에서 10으로 변경 될 것으로 예상합니다 count_to_10
. 레이블은 함수가 실행되는 동안이 아니라 반환 될 때 변경 됩니다.
콘솔 출력 :
1
2
3
4
5
6
7
8
9
10
라벨 변경 :
레이블은 함수가 끝난 후 한 번만 10으로 변경됩니다.
같은 결과가 다른 위젯 scrolledtext, Text,
에도 적용됩니다.
함수가 실행되는 동안 레이블 (또는 텍스트 관련 위젯)을 변경하려면 어떻게해야합니까?
당신의 도움을 주셔서 감사합니다!
추신 : 마치 GUI에 콘솔 출력을 갖는 것과 같습니다.
이 x.after()
방법 을 사용할 필요가 없습니다 . config
또는 configure
메서드를 사용하기 만하면됩니다 . counter_label.configure(text=i)
다음 과 같이 루트가 메인 창을 업데이트하도록 root.update()
해야합니다 . (루트는 전역이거나 인수로 전달되어야합니다).
완전한 코드 :
from tkinter import *
from time import sleep
def count_to_10():
for i in range(1, 11):
sleep(0.5)
print(i)
counter_label.configure(text=i) # Update the text in "Label" widget.
root.update() # Let root update the main window.
def GUI():
global root
root = Tk()
run_button = Button(root, text="run", command=count_to_10)
run_button.pack()
global counter_label
counter_label = Label(root, text="counter")
counter_label.pack()
root.mainloop()
GUI()
GUI :
콘솔 출력 :
>>> python3 test.py
1
2
3
4
5
6
7
8
9
10
노트 :
레이블이 한 번만 변경되었습니다 (카운터가 10 일 때). root
은 업데이트 할 수없고 count_to_10
함수가 반환 될 때 ( for
루프 후 ) 업데이트되었으며 물론 마지막 숫자는 10
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다