"시작"버튼을 눌렀을 때 반복적 인 작업을 시작할 수있는 "tkinter"인터페이스를 만들고 싶습니다. "정지"버튼을 누르면 진행중인 루프를 깨뜨릴 수 있습니다. 그러나 tkinter는 진행중인 루프가 끝날 때까지 (예 : "정지"버튼 클릭에 응답하지 않고 첨부 코드에 표시된대로 텍스트 또는 레이블 텍스트를 업데이트하지 않음) 추가 작업을 처리하지 못하는 것으로 나타났습니다. 그것은 stackoverflow에서 읽은 tkinter의 단일 스레드 특성과 관련이있는 것으로 보입니다. 누군가가 특정 코드를 도울 수 있습니까? 필자는 tkinter/Python을 처음 접했을 때 많은 일반적인 토론을 읽었지만 실제 해결책을 찾을 수 없었습니다.tkinter 버튼으로 진행중인 루프를 중단하십시오.
편집 : 또한,에 root.update()
를 추가 내가 무엇을 할 것이있다
import time
import Tkinter as Tk
def _start():
for outer in range(5):
if active_stat:
time.sleep(1) # some code in the real app
else:
break
for inner in range(5):
if active_stat:
#counterstr.set("%02d-%02d" % (outer,inner)) #does not update till the end of loop
textbox.insert(Tk.END, "%02d-%02d\n" % (outer,inner)) #does not show till the end of loop
print "%02d-%02d" % (outer,inner)
time.sleep(1) #some code in the real app
else:
break
def _stop():
active_stat=False
active_stat=True
root = Tk.Tk()
#counterstr=Tk.StringVar()
#Tk.Label(root, textvariable=counterstr).pack(side=Tk.TOP)
textbox=Tk.Text(root)
textbox.pack(side=Tk.TOP)
Tk.Button(root, text='Start', command=_start).pack(side=Tk.LEFT)
Tk.Button(root, text='Stop', command=_stop).pack(side=Tk.LEFT)
Tk.Button(root, text='Quit', command=root.quit).pack(side=Tk.LEFT)
root.mainloop()
나는 비슷한 일을해야했습니다. 원한다면 내 코드를 별도의 프로세스에서 실행하기 위해'processing' 모듈을 사용하여 솔루션을 게시 할 수 있습니다. –