저는 파이썬으로 프로그래밍을 시작한 지 불과 몇 달 전이었습니다. 처음부터 너무 직관적이고 재미 있습니다.Tkinter로 파이썬 3에서 함수를 멈추거나 인터럽트하는 방법
시작점 데이터 : 나는 파이썬을 실행하는 리눅스 mashine을 가지고있다. 3.2.3 GUI에 3 개의 버튼이 있는데, 하나의 기능을 시작하고 하나는 프로세스 또는 프로세스 (아이디어)를 멈추게한다. 나는 동안을 시도하고, 제외와 노력하지만, 주요 문제는 GUI (thinter가) 과정에서 그 시간에 응답하지 않는 실행되고 있다는 것이다있다
def printName1(event):
while button5 != True
print('Button 1 is pressed')
time.sleep(3) # just for simulation purposes to get reaction time for stopping
return
print('STOP button is pressed')
def StopButton():
button5 = True
다음과 같이
소스입니다. 입력을 저장하고 첫 번째 기능 (printName1)이 완료된 후에 실행합니다. 또한 stackoverflow를 보았지만 솔루션이 제대로 작동하지 않아 중단에 동일한 문제가있었습니다. 나는 (아마) 기본적인 질문에 사과한다. 그러나 나는 파이썬으로 매우 새롭고, 노력하고있는 검색의 며칠을 보낸다.
할 방법이 있습니까? 솔루션은 스레딩으로 만들 수 있습니까? 그러나 어떻게? 조언/도움은 정말 고맙습니다.
고맙습니다.
예, 당신은 다른 스레드로 그 기능을 넣어해야합니다. GUI와 동일한 스레드에서 실행되는 모든 작업이 GUI를 차단하고 입력을 차단합니다. (경우에 따라 생성기 기능을 사용하여이 작업을 수행 할 수도 있지만 일반적으로 스레드는 "이동"방법입니다.) – UnholySheep
Bryan에게 감사드립니다. 그렇다면이 함수로 시작하는 방법과 더 구체적으로 어떻게 스레딩 킬링 함수를 사용해야합니까? 나는 이것이 어떻게 작동하거나 보이게 될지 전혀 몰랐습니다. 나는 아주 단순한 구문으로 상상할 수 있지만 유선이거나 그렇지 않은 것 같습니다. – skyflyofsw
몇 가지 옵션이 있습니다. 이 경우 가장 간단한 방법은'printName1'의 전체 기능을 스레드로 옮기는 것입니다. 이 솔루션은 모든 문제에 이상적이지는 않지만이 문제를 해결할 수 있습니다. 파이썬은 병렬성을 다루기 위해 [concurrent.future] (https://docs.python.org/3/library/concurrent.futures.html#module-concurrent.futures), [threading] (https : //docs.python.org/3/library/threading.html) 및 [_thread] (https://docs.python.org/3.5/library/_thread.html?highlight=thread#module-_thread)를 참조하십시오. – UnholySheep