Одной из проблем в вашем коде является использование оператора if
. Вы спрашиваете, имеет ли текстовый объект длину, вместо проверки содержимого текстового объекта. Это можно исправить с помощью get()
. Если вы используете get()
в текстовом поле, вам нужно будет указать индексы. .get(1.0, "end")
. Проблема, связанная с этим, заключается в том, что вы получите длину, которая на 1 символ длиннее, чем было введено, поэтому простое решение - просто использовать здесь поле ввода.
С полем Entry()
вы можете использовать get()
без индексов, и он получит копию текста в этом поле. Имейте в виду, если у вас есть пробел до или после текста, он также будет учитываться. Если вы хотите компенсировать это, вы можете добавить strip()
после get()
, чтобы удалить пробелы с обеих сторон.
Для небольшой очистки вы захотите изменить способ создания сообщения. С вашим кодом, если вы нажмете кнопку несколько раз, программа будет добавлять новое сообщение при каждом нажатии кнопки. Это приведет к тому, что сообщения будут складываться. Чтобы избежать этого, сначала создайте метку сообщения, а затем просто обновите ее с помощью нашей функции, используя метод .config()
.
Следующий бит очистки позволяет удалить назначения переменных для виджетов, которые в них не нуждаются. Ваша первая метка и кнопка не должны быть назначены переменной в этом случае.
Последнее, что нужно сделать, это убедиться, что вы соответствуете своим виджетам. Прямо сейчас (на основе вашего примера кода) вы импортируете tkinter дважды. Один раз с from tkinter import *
и один раз с import tkinter as tk
. Вам не нужны оба, и вы должны придерживаться только 2-го метода импорта. Использование import tkinter as tk
поможет предотвратить переопределение встроенных методов при аварии.
Посмотрите на мой код:
import tkinter as tk
root = tk.Tk()
def check_number():
msg.config(text = "")
if len(txtNum1.get().strip()) != 11:
error_number = "the number that you entered is wrong"
msg.config(text = error_number)
tk.Label(root, text="enter your number", fg="gray").pack()
txtNum1 = tk.Entry(root, width=30)
txtNum1.pack(side=tk.TOP)
tk.Button(root, text="chek", fg="green", command=check_number).pack(side=tk.BOTTOM)
msg = tk.Message(root, text = "" , fg="red")
msg.pack()
root.mainloop()