2012-09-27 6 views
0

Tkinter에서 버튼의 콜백을 깨는 것이 가능합니까? 사용자가 실수를하면 코드의 특정 부분에 오류가 발생하지만 for 루프 내의 다른 for 루프와 while 루프에 중첩되어 있으며 2 또는 3 개의 함수가 될 수있는 코드 세그먼트가 있습니다. 깊은 (이 기능의 반환과 함께 작동).파이썬 : Tkinter : 버튼 명령 호출 중단

이 오류가 발견되면 mainloop()로 돌아가고 싶습니다.

그래서 코드 보인다 조금 같은 : 이것이 않는 값이 너무 낮다는 것을 확인하고, 다음 루프 발발 한 후 이전 함수의 변수 "Y"를 반환 무엇

from Tkinter import * 
def func_call(val_list): 
    y = [] 
    for nn in range(len(val_list)): 
     if val_list[nn] < 0: 
      print('You entered a value that was too low.') 
      break 
     else: 
      y.append(val_list[nn]+5) 
    return(y) 
def Button_callback(value): 
    val_list = [value,value-1,value-2,value-3] 
    y = func_call(val_list) 
    for nn in range(len(val_list)): 
     print(y[nn]) 
root = Tk() 
Button(root,text='Press me',command=lambda: Button_callback(1)).grid(row=0,column=0) 
root.mainloop() 

그러면 "y"가 "val_list"와 길이가 같기 때문에 즉시 오류가 발생합니다.

내가하고 싶은 것은 버튼을 누르는 것만으로 돌아 가기 때문에 "func_call"과 "Button_callback"둘 다에서 "너무 낮은 값을 입력했습니다." 오류 메시지로.

제안 사항?

답변

1

이 문제는 Tkinter와별로 관련이 없습니다. 정상적인 제어 흐름 질문 일뿐입니다. 일반적으로 내부 함수에서 모든 처리를 중지하려는 상황을 처리하는 방법은 예외를 throw하는 것입니다. 예외가 무언가를 잡을 때까지 전파 될 것이기 때문입니다. 예를 들어

:

def func_call(val_list): 
    ... 
    if val_list[nn] < 0: 
     raise ValueError("value too low") 
... 
def Button_callback(value): 
    ... 
    try: 
     y = func_call(val_list) 
    except ValueError: 
     return 
+0

아 ... 예 ... 완벽하게 작동했습니다. 감사합니다. –

0

아마도 당신은 대신 파괴의 없음을 반환하지 않거나 빈 목록 y로 반환 할 수 있습니다. 이 문제가 있습니까?

+0

"IndexError :리스트 인덱스가 범위를 벗어났습니다."오류가 발생합니다. 실제 코드는 여기에 제시된 광범위한 예제보다 훨씬 복잡하지만 실제로는 상위 함수가 특정 크기, 그리고 그 주위에 놀아요. –

+0

아, 알았어 :) – Tadgh