2016-07-02 2 views
0

まず、OOPを使用していないのは残念ですが、私はちょうどそのような小さなプログラムの複雑さを避けることに決めました。類似の検証関数が機能しない

from tkinter import * 
root = Tk() 
root.title("Entry Validation") 
root.geometry("300x100") 

def validation_function(text): 
    if len(text) <= 5: 
     try: 
      text = int(text) 
      return True 
     except: 
      return False 
    else: 
     return False 

vcmd = root.register(validation_function) 
entry = Entry(root, validate='key', validatecommand=(vcmd, "%P")) 
entry.pack() 

それは正常な動作します: は、だからここに私のプログラムです(基本的には、それが唯一の最大長である5の整数で構成されたテキストを許可するエントリウィジェットです)。しかし、私は検証関数のボディに少し変更を加えたとき、それは動作しません:

def validation_function(text): 
    try: 
     text = int(text) 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

私は、問題はここにあると感じ:

except: 
    return False 

おそらく最大の長さの一部にはありません試してみるといいですよね。ただし、

def validation_function(text): 
    try: 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

が正しく動作します。しかし、最大の長さの部分だけがあります、私はまたそれが整数だけを許可したいです。私は最初の例でそれをやったことがありますが、私の質問は:私は最大長部分の場所を唯一の整数部分で変更すると、なぜ動作しないのですか?あなたがlen(int)を呼び出すことはできません

+0

は理由を説明せずに、私の質問にdownvoteしないでくださいしてみてください例外

を発生させます!それは私の特権を制限する。私はちょうどここに新しい、みんな、来て! –

答えて

3

textintです... ...それはこの

def validation_function(text): 
    try: 
     int(text) 
    except: 
     return False 
    if len(text) <= 5: 
     return True 
    return False 
+0

そうですよ!通常TypeErrorを発生させますが、この場合は例外です。私はそれに注意を払わなければならなかった...ありがとう! –

+0

すみません、もう1つ質問があります:エントリーテキストを削除しようとすると、どうして私は問題になるのですか?私はエントリウィジェットにバインドされた明確な関数を使用しているので、エントリエリアをクリックするとクリアされる必要があります。ボタンをクリックした後に入力テキストを消すための明確なボタンも追加しましたが、どちらも機能しません。それを修正する方法はありますか?私は多くの方法を試みましたが、どれも解決しませんでした。 –

+0

解決済み: テキストでない場合: なし return True –