2012-09-27 49 views
0

在Tkinter中,是否有可能分解爲按鈕上的回調。我有一段代碼,如果用戶犯了一個錯誤,會在它的特定部分產生錯誤,但是它在for循環中嵌套在for循環和while循環中,可以是2或3個函數很深(隨着這些功能的返回而被操作)。Python:Tkinter:打破按鈕命令調用

我想要做的是在發現這個錯誤時返回到主循環()。

,使代碼看起來有點像:

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() 

這樣做是標識的值太低,然後爆發for循環,然後返回變量「Y」以前的功能,然後迅速輸出一個錯誤,因爲它期望「y」與「val_list」的長度相同。

我想要做的是有效地返回到按鈕按鈕,所以只用「你輸入的值太低」來分解「func_call」和「Button_callback」。作爲錯誤消息。

有什麼建議嗎?

回答

1

這個問題與Tkinter沒有多大關係,它只是一個正常的控制流問題。通常情況下,如果你想讓內部函數停止所有處理,你處理這種情況的方式是拋出一個異常,因爲異常會傳播到某種程度,直到捕獲它爲止。

例如:

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

也許你可以只,而不是斷裂,返回None,或返回空列表年。這有問題嗎?

+0

我仍然會得到一個「IndexError:列表索引超出範圍」的錯誤 - 實際的代碼比我在這裏給出的廣泛例子複雜得多,但是事實是更高級的函數期望看到一個列表一定的尺寸,然後玩弄它。 –

+0

ahhh,好吧然後:) – Tadgh