2012-11-03 2 views
0

Tkinger AFTER 메소드로 예약 된 메소드가 있는지 어떻게 확인합니까? 캔버스 (AFTER 메서드로 예약 됨)에 무작위로 주어진 수의 사각형을 생성하는 하나의 메서드와 클릭 한 사각형을 삭제하는 메서드가 있습니다 (이 메서드는 기본적으로 각 사각형의 이벤트 처리기입니다.) 마지막으로 삭제 한 사각형 특정 시간 (예 : 2 초) 후에 클릭되지 않고 AFTER 메소드로 예약 된 사각형. 내가 뭘하고 싶은지는 메시지 상자를 보여주고 지정된 수의 모든 사각형이 그려지고 캔버스에서 제거 될 때만 메시지를 표시하는 것입니다. 모든 사각형이 제거되었지만 여전히 그려지는 사각형이 거의 없기 때문에 find_all 메서드를 사용하면 전혀 작동하지 않습니다. 내가 변수를 그리는 방법을 사용하고 0으로 줄이면 사각형이 표시되기 전에 0으로 줄어들고 잘못된 시간에 메시지 상자가 나타납니다. 그래서 AFTER 메서드 목록에서 실행될 수있는 메서드가 있는지 알아낼 방법을 찾고 있습니다.Tkinter로 예약 된 메소드가 있는지 확인하십시오.

+0

는 당신이 더 많은 사각형 그릴 남아있는 경우 알 수있는 방법이 무엇입니까? 왜 그냥 카운터 == 0 및 finished_drawing() :'... – mgilson

+0

사각형이 즉시 그려지지 않고 메서드 뒤에 스케줄되므로 모든 사각형을 그리기 전에 변수가 0으로 감소합니다. 그래서 그 조건을 사용하면 잘못된 시간에 메시지 상자가 나타납니다. – Andrew

답변

1

Tkinter 방법을 사용할 수 있는지는 잘 모르겠지만 Tk를 직접 사용하면 widget.tk.call('after', 'info')after 대기중인 구독 목록을 반환 할 수 있습니다.

여기에 전체 예를

import Tkinter 

def foo(): 
    print "foo" 

root = Tkinter.Tk() 
root.after(1000, foo) 
#>u'after#0' 
root.after(1000, foo) 
#>u'after#1' 
root.tk.call('after', 'info') 
#>'after#1 after#0' 
관련 문제