【问题标题】:Python: Tkinter: Break out of a button command callPython:Tkinter:打破按钮命令调用
【发布时间】:2012-09-19 10:12:52
【问题描述】:

是否有可能在 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”。作为错误消息。

有什么建议吗?

【问题讨论】:

    标签: python tkinter return break


    【解决方案1】:

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

    【讨论】:

    • 我仍然会收到“IndexError: list index out of range”错误 - 实际代码比我在这里给出的广泛示例要复杂得多,但事实是更高的功能希望看到一个特定大小的列表,然后玩弄它。
    【解决方案2】:

    这个问题与 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 
    

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多