2016-07-02 5 views
0

Прежде всего, извините за отсутствие использования ООП, я просто решил избежать сложности для такой небольшой программы. Так вот моя программа (в основном, это въездной виджет, который позволяет текст, который состоит только из целых чисел, максимальная длина 5):Аналогичные функции проверки не работают

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

Он работает нормально. Но когда я делаю небольшое изменение в теле функции проверки, он не работает:

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

Я чувствую, что проблема здесь:

except: 
    return False 

Вероятно, максимальная длина рабочей части не хорошо сочетаются с try-except ... Однако:

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

работает правильно. Но есть только часть максимальной длины, я также хочу, чтобы она допускала только целые числа. Я сделал это в первом примере, но мой вопрос: почему он не работает, когда я меняю места максимальной части с единственной целой частью?

+0

Пожалуйста, не downvote мои вопросы без объяснения причин! Это ограничивает мои привилегии. Я здесь просто новый, ребята, давай! –

ответ

3

text является int ... вы не можете назвать len(int) ... это вызовет исключение

попробовать это

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

Правильно! Он вызывает TypeError как правило, и в этом случае исключение. Я должен был обратить внимание на это ... Спасибо! –

+0

Извините, еще один вопрос: почему у меня возникают проблемы при попытке удалить текст ввода? Я даже использую четкую функцию, связанную с виджетами записи, поэтому, когда я нажимаю на область ввода, она должна очищаться; Я также добавил четкую кнопку, чтобы удалить текст ввода после нажатия кнопки, но ни одна из них не работает. Есть ли способ исправить это? Я пробовал много способов, но никто из них не работал. –

+0

Решено использовать: если нет текста: Нет return True –

Смежные вопросы