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 に答える