You are currently viewing Python Tkinter – Виджет Проверки ввода

Python Tkinter – Виджет Проверки ввода

Python предлагает множество фреймворков для работы с графическими приложениями. Tkinter Интерфейс or Tk является одним из наиболее широко используемых интерфейсов Python для создания приложений на основе графического интерфейса. Существуют приложения, которые требуют проверки текстовых полей, чтобы предотвратить неверный ввод данных пользователем до отправки формы. Python позволяет проверять ввод, разрешая трассировку переменных с помощью функции обратного вызова. Эта функция вызывается всякий раз, когда ввод добавляется/удаляется в/из виджета ввода. Некоторые приложения проверяют ввод при отправке формы, но следующий фрагмент кода выполняет проверку при каждом нажатии клавиши с клавиатуры.

  1. Импорт модуля tkinter
import tkinter

2. Импорт подмодулей tkinter

from tkinter import *

3. Определите функцию “обратного вызова”

def callback(input):
 if input.isdigit():
 print(input)
 return True
 
 elif input is "":
 print(input)
 return True

 else:
 print(input)
 return False

Объяснение

Функция обратного вызова проверяет ввод в виджете ввода на наличие допустимой записи. Если запись действительна, она возвращает значение True или False. В этом примере ввод, введенный с клавиатуры, проверяется на наличие цифрового типа. Если ввод имеет числовой тип, то функция обратного вызова возвращает значение true. Для операции удаления функция обратного вызова возвращает значение true при вводе “” . Однако для любого нечислового ввода функция обратного вызова возвращает значение false.

4. Создание родительского окна

root=Tk()

Синтаксис: 

Tk(screenName=None, baseName=None, className=’Tk’, useTk=1)

Параметр: В этом примере экземпляр класса Tk создается без аргументов.

Объяснение

Этот метод создает родительский виджет, который обычно является главным окном приложения.

5. Создание виджета ввода

e = Entry(root)

Синтаксис: 

Entry(master, **options):

  • masterПредставляет родительское окно (здесь корень) .
  • optionsПоддерживаемые параметры: bg, bd, command, cursor, font, exportselection, justify, relief, highlightcolor, fg, selectbackground, selectforeground, selectborderwidth, show, xscrollcommand, state, textvariable и width.

Возвращаемое значение: Возвращает строку (.!запись) .

Пояснение:

Этот метод используется для создания виджета ввода в родительском виджете (корневом) .

6. Укажите положение виджета ввода в родительском окне

e.place(x=50, y=50)

Синтаксис: 

place(x, y):

  • x: Положение виджета ввода относительно родительского виджета по оси X.
  • y: Положение виджета ввода относительно родительского виджета по оси Y.

Пояснение:

Этот метод определяет положение виджета ввода в родительском окне (корневом).

7. Зарегистрируйте функцию обратного вызова

reg = root.register(callback)

Синтаксис: 

register(function):

  • functionФункция, которая должна быть вызвана для проверки ввода в виджете ввода.

Возвращаемое значение: Этот метод возвращает строку символов, которую можно использовать для вызова функции.

Объяснение

Метод register() возвращает строку, которая назначается переменной ‘reg’, которая используется для вызова функции обратного вызова на более поздних этапах.

8. Вызовите функцию обратного вызова для проверки ввода в виджете ввода

e.config(validate="key", validatecommand=(reg, '%P'))

Синтаксис: 

config(validate=”key”, validatecommand=(reg, ‘%P’)):

  • validateЭтот параметр используется для указания того, когда будет вызвана функция обратного вызова для проверки входных данных. Значение “ключ” указывает, что проверка выполняется всякий раз, когда любое нажатие клавиши(ввод с клавиатуры) изменяет содержимое виджета.
  • validatecommandЭтот параметр используется для указания функции обратного вызова. Функция не вызывается напрямую, скорее передается переменная, которая была зарегистрирована на предыдущих шагах. «%P » передается для обозначения значения, которое будет иметь текст, если изменение разрешено.

Опция Проверки объяснения поддерживает другие значения, такие как фокус, фокусировка, фокусировка, все и нет. Значение по умолчанию — “нет”, что означает отсутствие проверки.
Опция Validatecommand поддерживает другие значения, такие как %d, %i, %s, %S, %v, %V и %W . Процентная подстановка может быть добавлена для каждого параметра, передаваемого в функцию Python
Виджет ввода также поддерживает опцию invalidcommand, которая вызывает функцию всякий раз, когда команда validatecommand возвращает значение False.
Они могут быть использованы в зависимости от требований пользователя.

9. Запустите приложение

root.mainloop()

Синтаксис:

mainloop()

Объяснение:

mainloop () — это бесконечный цикл, используемый для запуска приложения до тех пор, пока окно не закрыто.

Полный код для проверки виджета ввода

import tkinter
from tkinter import *


def callback(input):
	
	if input.isdigit():
		print(input)
		return True
						
	elif input is "":
		print(input)
		return True

	else:
		print(input)
		return False
						
root = Tk()

e = Entry(root)
e.place(x = 50, y = 50)
reg = root.register(callback)

e.config(validate ="key",
		validatecommand =(reg, '% P'))

root.mainloop()

Вывод: (Рекомендуется просмотр в полноэкранном режиме)

Пояснение

Когда мы вводим цифры с помощью клавиатуры, функция обратного вызова возвращает значение true, и это значение разрешено в виджете ввода. Однако при вводе алфавитов с клавиатуры функция обратного вызова возвращает значение false, и значение не разрешается вводить в виджете ввода. Чтобы получить более четкое представление о работе функции обратного вызова, ввод, отправляемый с клавиатуры, печатается на консоли. Видно, что любой нечисловой ввод печатается на консоли, но не допускается в виджете ввода. Также в виджете ввода допускается как вставка, так и удаление цифр.