본문 바로가기
파이썬

파이썬 변수에서 Tkinter 레이블 업데이트

by º기록 2020. 12. 7.
반응형

생성 작업을 수행하는 Python 스크립트를 작성하고 문자열 변수로 저장된 일부 텍스트를 계속 변경했습니다. 이것은 작동하며 문자열이 변경 될 때마다 인쇄 할 수 있습니다.

레이블이 처음으로 문자열을 표시하도록 할 수 있지만 업데이트되지는 않습니다.

내 코드는 다음과 같습니다.

from tkinter import *

outputText = 'Ready'
counter = int(0)

root = Tk()
root.maxsize(400, 400)

var = StringVar()

l = Label(root, textvariable=var, anchor=NW, justify=LEFT, wraplength=398)
l.pack()

var.set(outputText)

while True:
    counter = counter + 1
    outputText = result
    outputText = result
    outputText = result
    if counter == 5:
        break

root.mainloop()

레이블은 Ready 를 표시하지만 나중에 생성 될 때 문자열로 변경하도록 업데이트하지 않습니다.

약간의 인터넷 검색과이 사이트의 답변을 살펴본 후 해결책은 update_idletasks 를 사용하는 것이라고 생각했습니다. 변수가 변경 될 때마다 입력 해 보았지만 도움이되지 않았습니다.

 

해결 방법

 

이 창은 메인 루프가 입력 된 후에 만 ​​표시됩니다. 따라서 root.mainloop () 줄 앞의 while True 블록에서 변경 한 내용을 볼 수 없습니다.

GUI 인터페이스는 메인 루프에있는 동안 이벤트에 반응하여 작동합니다. 다음은 StringVar가 Entry 위젯에도 연결된 예입니다. Entry 위젯에서 텍스트를 변경하면 Label에서 자동으로 변경됩니다.

from tkinter import *

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

t = Entry(root, textvariable = var)
t.pack()

root.mainloop() # the window is now displayed


다음은 수행하려는 작업의 실제 예입니다.

from tkinter import *
from time import sleep

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

for i in range(6):
    sleep(1) # Need this to slow the changes down
    var.set('goodbye' if i%2 else 'hello')
    root.update_idletasks()

root.update 대기중인 모든 이벤트가 Tcl 에 의해 처리 될 때까지 이벤트 루프를 입력합니다.

 

참조 페이지 https://stackoverflow.com/questions/2603169

 

 

반응형

댓글