2016-12-11 1 views
0

이미지가 표시된 프로그램이 있습니다. 사용자가 중지 된 경우에도, 사용자 프레스를 여러 번 입력 할 때 문제는, 콜백 함수는 또 다시 불려갑니다사용자의 입력을 무시하십시오.

root = tk.Tk() 
def callback_enter(e): 
    # Heavy computation 

root.bind("<Return>", callback_enter) 
root.mainloop() 

: 사용자가 Enter 키를 누를 때마다, 나는 이미지를 다시 계산, 무슨 시간이 좀 걸립니다 프로그램은 이전의 모든 키 누름을 기억하므로 버튼을 누릅니다. 방법이 있습니까 callback_enter() 그 실행 중에 완료되었습니다 모든 키를 누르면 제거?

답변

1

여기서 문제는 이미지 계산과 관련하여 프로그램이 입력을 버퍼링하는 기본 루프와 상호 작용할 수 없다는 것입니다. 접근하는 한 가지 방법은 시간 프레임 기준으로 이벤트를 필터링하는 것입니다.

은, 아마 내가 ... 어쨌든, 간단한 너무 늦게 지연에 대한
import time 
import random 
import Tkinter as tk 

root = tk.Tk() 

LAST_CALL_TIME = 0 
TIME_THRESHOLD = .1 

def performHeavyComputation(): 
    print("performHeavyComputation() START") 
    time.sleep(1 + random.random()) 
    print("performHavyComputation() END") 

def callback_enter(e): 
    global LAST_CALL_TIME 
    global TIME_THRESHOLD 

    t = time.time() 
    if t - LAST_CALL_TIME < TIME_THRESHOLD: 
     print("[%.3f] filtering event e:%s"%(t, e)) 
    else: 
     LAST_CALL_TIME = t 
     performHeavyComputation() 
     t1 = time.time() 
     TIME_THRESHOLD = t1 - t + 0.1 

root.bind("<Return>", callback_enter) 
root.mainloop() 
+0

작동 중입니다. 감사합니다. 나는 Python을 처음 접했을 뿐이므로이 컨텍스트에서 전역 적으로 어떤 일을하는지 간단히 설명해 주시겠습니까? – Jonas

0

미안하고 있습니다 : 여기 당신은 유지, 지속적인 유지 변수를 사용하기 위해 전역 변수를 사용할 필요가 여기에 예제로 구현이다 프로그램 실행 중 그 값. 그래서 우리는 그것들을 함수의 지역적으로 재 정의하는 것을 피하기 위해 함수 정의 안에서 그것들을 전역 변수로 선언한다.

이 한 번 봐 걸릴 수 : http://www.python-course.eu/python3_global_vs_local_variables.php 나이 : Use of "global" keyword in Python

환호.

관련 문제