Python как получить значение entry

Виджет Tkinter Entry в Python – как использовать

Виджет Tkinter Entryв Python используется для отображения однострочного текстового поля для введения пользовательских значений. Мы можем применять виджет Entry, чтобы принимать текстовые строки от пользователя. Он позволяет вводить только одну строку текста. Для нескольких строк текста мы должны использовать текстовый виджет.

Синтаксис для использования виджета Entry приведен ниже.

Список возможных вариантов приведен ниже.

Вариант Описание
1 bg Цвет фона виджета.
2 bd Ширина границы виджета в пикселях.
3 cursor Указатель мыши изменится на тип курсора, установленный на стрелку, точку и т. д.
4 exportselection Текст, написанный внутри поля ввода, по умолчанию автоматически копируется в буфер обмена. Мы можем установить для параметра exportselection значение 0, чтобы не копировать это.
5 fg Он представляет цвет текста.
6 font Представляет тип шрифта текста.
7 highlightbackground Представляет цвет, отображаемый в выделенной области обхода, когда виджет не имеет фокуса ввода.
8 highlightcolor Он представляет цвет, используемый для прямоугольника выделения обхода, который рисуется вокруг виджета, когда он имеет фокус ввода.
9 highlightthickness Представляет собой неотрицательное значение, указывающее ширину выделенного прямоугольника для рисования за пределами виджета, когда он имеет фокус ввода.
10 insertbackground Он представляет собой цвет, используемый в качестве фона в области, охватываемой курсором вставки. Этот цвет обычно имеет приоритет над обычным фоном виджета.
11 insertborderwidth Представляет собой неотрицательное значение, указывающее ширину трехмерной границы, обводимой вокруг курсора вставки. Значение может иметь любую форму, приемлемую для Tk_GetPixels.
12 insertofftime Он представляет собой неотрицательное целое число, указывающее количество миллисекунд, в течение которого курсор вставки должен оставаться выключенным в каждом цикле мигания. Если этот параметр равен нулю, то курсор не мигает: он постоянно включен.
13 insertontime Задает неотрицательное целое число, указывающее количество миллисекунд, в течение которого курсор вставки должен оставаться включенным в каждом цикле мигания.
14 insertwidth Он представляет собой значение, указывающее общую ширину курсора вставки. Значение может иметь любую форму, приемлемую для Tk_GetPixels.
15 justify Он определяет, как организован текст, если текст состоит из нескольких строк.
16 relief Определяет тип границы. Его значение по умолчанию – FLAT.
17 selectbackground Цвет фона выделенного текста.
18 selectborderwidth Ширина границы, отображаемой вокруг выбранной задачи.
19 selectforeground Цвет шрифта выбранной задачи.
20 show Он используется для отображения текста ввода какого-либо другого типа вместо строки. Например, пароль вводится с использованием звездочек(*).
21 textvariable Он установлен на экземпляр StringVar для извлечения текста из записи.
22 width Ширина отображаемого текста или изображения.
23 xscrollcommand Виджет ввода можно связать с горизонтальной полосой прокрутки, если мы хотим, чтобы пользователь вводил больше текста, чем фактическая ширина виджета.
Читайте также:  Java and python eclipse

Пример

# !/usr/bin/python3 from tkinter import * top = Tk() top.geometry("400x250") name = Label(top, text = "Name").place(x = 30,y = 50) email = Label(top, text = "Email").place(x = 30, y = 90) password = Label(top, text = "Password").place(x = 30, y = 130) sbmitbtn = Button(top, text = "Submit",activebackground = "pink", activeforeground = "blue").place(x = 30, y = 170) e1 = Entry(top).place(x = 80, y = 50) e2 = Entry(top).place(x = 80, y = 90) e3 = Entry(top).place(x = 95, y = 130) top.mainloop()

Запись Python Tkinter

Методы виджета

Python предоставляет различные методы для настройки данных, записываемых внутри виджета. Виджет Entry предоставляет следующие методы.

Метод Описание
1 delete(first, last = none) Он используется для удаления указанных символов внутри виджета.
2 get() Он используется для записи текста внутри виджета.
3 index(index) Он используется для изменения положения курсора вставки. Мы можем указать индекс символа, перед которым будет помещен курсор.
4 index(индекс) Он используется для размещения курсора слева от символа, записанного по указанному индексу.
5 insert(index,s) Он используется для вставки указанной строки перед символом, помещенным в указанный индекс.
6 select_adjust(index) Включает выбор символа, присутствующего в указанном индексе.
7 select_clear() Очищает выбор, если какой-то выбор был сделан.
8 select_form(index) Он устанавливает позицию индекса привязки на символ, указанный индексом.
9 select_present() Возвращает истину, если выбран какой-либо текст в записи, в противном случае возвращает ложь.
10 select_range(start,end) Он выбирает символы, которые должны находиться в указанном диапазоне.
11 select_to(index) Он выбирает все символы от начала до указанного индекса.
12 xview(index) Используется для привязки виджета входа к горизонтальной полосе прокрутки.
13 xview_scroll(number,what) Он используется для горизонтальной прокрутки записи.

Пример: простой калькулятор

import tkinter as tk from functools import partial def call_result(label_result, n1, n2): num1 =(n1.get()) num2 =(n2.get()) result = int(num1)+int(num2) label_result.config(text="Result = %d" % result) return root = tk.Tk() root.geometry('400x200+100+200') root.title('Calculator') number1 = tk.StringVar() number2 = tk.StringVar() labelNum1 = tk.Label(root, text="A").grid(row=1, column=0) labelNum2 = tk.Label(root, text="B").grid(row=2, column=0) labelResult = tk.Label(root) labelResult.grid(row=7, column=2) entryNum1 = tk.Entry(root, textvariable=number1).grid(row=1, column=2) entryNum2 = tk.Entry(root, textvariable=number2).grid(row=2, column=2) call_result = partial(call_result, labelResult, number1, number2) buttonCal = tk.Button(root, text="Calculate", command=call_result).grid(row=3, column=0) root.mainloop()

Источник

Читайте также:  Align fonts in html

Python как получить значение entry

Элемент Entry представляет поле для ввода текста. С помощью конструктора Entry можно установить ряд параметров, основные из них:

  • background : фоновый цвет
  • cursor : курсор указателя мыши при наведении на текстовое поле
  • foreground : цвет текста
  • font : шрифт текста
  • justify : устанавливает выравнивание текста. Значение LEFT выравнивает текст по левому краю, CENTER — по центру, RIGHT — по правому краю
  • show : задает маску для вводимых символов
  • state : состояние элемента, может принимать значения NORMAL (по умолчанию) и DISABLED
  • textvariable : устанавливает привязку к элементу StringVar
  • width : ширина элемента

Элемент Entry имеет ряд методов. Основные из них:

  • insert(index, str) : вставляет в текстовое поле строку по определенному индексу
  • get() : возвращает введенный в текстовое поле текст
  • delete(first, last=None) : удаляет символ по индексу first. Если указан параметр last, то удаление производится до индекса last. Чтобы удалить до конца, в качестве второго параметра можно использовать значение END.
  • focus() : установить фокус на текстовое поле

Простейшее текстовое поле:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") ttk.Entry().pack(anchor=NW, padx=8, pady= 8) root.mainloop()

текстовое поле ввода Entry в tkinter и python

Получение введенного текста

Для получения текста из Entry, можно использовать его метод get() . Так, определим элемент Entry и по нажатию на кнопку выведем введенный текст на текстовую метку:

from tkinter import * from tkinter import ttk def show_message(): label["text"] = entry.get() # получаем введенный текст root = Tk() root.title("METANIT.COM") root.geometry("250x200") entry = ttk.Entry() entry.pack(anchor=NW, padx=6, pady=6) btn = ttk.Button(text="Click", command=show_message) btn.pack(anchor=NW, padx=6, pady=6) label = ttk.Label() label.pack(anchor=NW, padx=6, pady=6) root.mainloop()

получение текста из текстового поля Entry в tkinter в Python

Вставка и удаление текста

Рассмотрим вставку и удаление текста в Entry:

from tkinter import * from tkinter import ttk def clear(): entry.delete(0, END) # удаление введенного текста def display(): label["text"] = entry.get() # получение введенного текста root = Tk() root.title("METANIT.COM") root.geometry("250x150") label = ttk.Label() label.pack(anchor=NW, padx=6, pady=6) entry = ttk.Entry() entry.pack(anchor=NW, padx=6, pady=6) # вставка начальных данных entry.insert(0, "Hello World") display_button = ttk.Button(text="Display", command=display) display_button.pack(side=LEFT, anchor=N, padx=6, pady=6) clear_button = ttk.Button(text="Clear", command=clear) clear_button.pack(side=LEFT, anchor=N, padx=6, pady=6) root.mainloop()

При запуске программы в текстовое поле сразу же добавляется текст по умолчанию:

Кнопка Clear очищает оба поля, вызывая метод delete:

def clear(): entry.delete(0, END)

Вторая кнопка, используя метод get, получает введенный текст:

def display(): label["text"] = entry.get()

Валидация

С помощью параметра validate конструктора Entry можно задать, когда проводить валидацию введенного значения. Этот параметр может принимать следующие значения:

  • none : отсутствие валидации, значение по умолчанию
  • focus : валидация при получении фокуса
  • focusin : валидация при изменении фокуса
  • focusout : валидация при потере фокуса
  • key : валидация при каждом вводе нового символа
  • all : валидация при измении фокуса и вводе символов в поле

Параметр validatecommand позволяет установить команду валидации.

Рассмотрим небольшой пример. Допустим, пользовтаель должен ввести номер телефона в формете +xxxxxxxxxxx. То есть сначала должен идти знак +, а затем 11 цифр, например, +12345678901:

from tkinter import * from tkinter import ttk import re def is_valid(newval): return re.match("^\+\d$", newval) is not None root = Tk() root.title("METANIT.COM") root.geometry("250x200") check = (root.register(is_valid), "%P") phone_entry = ttk.Entry(validate="key", validatecommand=check) phone_entry.pack(padx=5, pady=5, anchor=NW) root.mainloop()

Итак, параметр validate=»key» указывает, что мы будем валидировать ввод при каждом нажати на клавиатуру. Параметр validatecommand=check говорит, что валидировать ввод будет команда «check». Эта команда представляет кортеж из двух элементов:

check = (root.register(is_valid), "%P")

Первый элемент — вызов метода root.register(is_valid) регистрирует функцию, которая собственно будет производить валидацию — это функция is_valid() . Второй элемент — подстановка «%P» представляет новое значение, которое передается в функцию валидации.

Собственно саму валидацию выполняет функция is_valid() . Она принимает один параметр — текущее значение Entry, которое надо валидировать. Она возвращает True, если значение прошло валидацию, и False, если не прошло. Сама логика валидации представляет проверку строки на регулярное выражение «^\+\d*$» . Если новое значение соответствует этому выражению, и в нем не больше 12 символов, то оно прошло валидацию.

В итоге мы сможем ввести в текстовое поле только символ + и затем только 11 цифр.

Валидация ввода в entry на tkinter в Python

Теперь немного изменим код и добавим вывод ошибок валидации:

from tkinter import * from tkinter import ttk import re def is_valid(newval): result= re.match("^\+\d$", newval) is not None if not result and len(newval) 

Здесь для вывода ошибок валидации добавлен виджет Label. Если введенное значение не соответствует регулярному выражению (например, пользователь попытался ввести нецифровой символ), и длина ввода меньше и равно 12 символов (проверять ввод больше 12 символов нет смысла, так как номер телефона содержит только 12 символов), то в метке выводим сообщение об ошибке

Валидация ввода в entry и вывод сообщения об ошибке в tkinter в Python

Также мы можем передать значение параметра validate, чтобы в функции валидации в зависимости от того, нажал пользователь на клавишу или убрал фокус с поля, производить те или иные действия. В этом случае необходимо передать команде валидации дополнительный аргумент:

check = (root.register(is_valid), "%P", "%V")

Здесь значение "%V" представляет событие, которое вызывает валидацию (focus/focusin/focusout/key). Тогда в функции валидации с помощью второго параметра мы сможем получить это значение:

def is_valid(newval, op): result= re.match("^\+\d$", newval) is not None if op=="key": # некоторые действия elif op=="focus": # некоторые действия return result

Источник

Оцените статью