0

在 Tkinter 中,是否有可能分解到按钮上的回调。我有一段代码,如果用户犯了错误,将导致它的特定部分出错,但是它位于嵌套在另一个 for 循环和 while 循环中的 for 循环内,可以是 2 个或 3 个函数深度(这些函数的返回被操作)。

我想做的是在发现此错误时返回 mainloop() 。

所以代码看起来有点像:

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”。作为错误信息。

有什么建议么?

4

2 回答 2

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 
于 2012-09-27T15:49:08.747 回答
0

也许您可以只返回 None 或返回空列表 y,而不是中断。这有问题吗?

于 2012-09-27T15:51:15.823 回答