Как получить значение из entry tkinter
Перейти к содержимому

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

  • автор:

7. Tkinter. Текстовое поле¶

Элемент Entry представляет поле для ввода текста. Конструктор Entry принимает следующие параметры:

Entry(master, options) 

где master — ссылка на родительское окно, а options — набор следующих параметров:

  • bg: фоновый цвет
  • bd: толщина границы
  • cursor: курсор указателя мыши при наведении на текстовое поле
  • fg: цвет текста
  • font: шрифт текста
  • justify: устанавливает выравнивание текста. Значение LEFT выравнивает текст по левому краю, CENTER — по центру, RIGHT — по правому краю
  • relief: определяет тип границы, по умолчанию значение FLAT
  • selectbackground: фоновый цвет выделенного куска текста
  • selectforeground: цвет выделенного текста
  • show: задает маску для вводимых символов
  • state: состояние элемента, может принимать значения NORMAL (по умолчанию) и DISABLED
  • textvariable: устанавливает привязку к элементу StringVar
  • width: ширина элемента
from tkinter import * window = Tk() window.title("Welcome to entry app") txt = Entry(window, width=10) txt.pack() window.mainloop() 

скриншот

from tkinter import * window = Tk() window.title("Welcome to the second entry app") txt1 = Entry(window, width=10) txt2 = Entry(window, width=10) txt1.pack() txt2.pack() window.mainloop() 

скриншот

from tkinter import * root = Tk() root.title("Welcome to the second entry app") lbl_login = Label(root, text="Login") lbl_pass = Label(root, text="Password") txt1 = Entry(root, width=10) txt2 = Entry(root, width=10) btn = Button(root, text="Enter") lbl_login.pack() txt1.pack() lbl_pass.pack() txt2.pack() btn.pack() root.mainloop() 

скриншот

from tkinter import * def clicked(): lbl_welcome.configure(text="Welcome. ") root = Tk() root.title("Welcome to the second entry app") lbl_login = Label(root, text="Login") lbl_pass = Label(root, text="Password") lbl_welcome = Label(root) txt1 = Entry(root, width=10) txt2 = Entry(root, width=10) btn = Button(root, text="Enter", command=clicked) lbl_login.pack() txt1.pack() lbl_pass.pack() txt2.pack() btn.pack() lbl_welcome.pack() root.mainloop() 

скриншот

Определим элемент Entry и по нажатию на кнопку выведем его текст в отдельное окно с сообщением:

from tkinter import * from tkinter import messagebox def show_message(): messagebox.showinfo("GUI Python", message.get()) root = Tk() root.title("GUI на Python") root.geometry("300x250") message = StringVar() message_entry = Entry(textvariable=message) message_entry.place(relx=.5, rely=.1, anchor="c") message_button = Button(text="Click Me", command=show_message) message_button.place(relx=.5, rely=.5, anchor="c") root.mainloop() 

скриншот

Для вывода сообщения здесь применяется дополнительный модуль messagebox, содержащий функцию showinfo(), которая собственно и выводит введенный в текстовое поле текст. Для получения введенного текста используется комп StringVar, как было описано в одной из предыдущих тем.

Теперь создадим более сложный пример с формой ввода:

from tkinter import * from tkinter import messagebox def display_full_name(): messagebox.showinfo("GUI Python", name.get() + " " + surname.get()) root = Tk() root.title("GUI на Python") name = StringVar() surname = StringVar() name_label = Label(text="Введите имя:") surname_label = Label(text="Введите фамилию:") name_label.grid(row=0, column=0, sticky="w") surname_label.grid(row=1, column=0, sticky="w") name_entry = Entry(textvariable=name) surname_entry = Entry(textvariable=surname) name_entry.grid(row=0,column=1, padx=5, pady=5) surname_entry.grid(row=1,column=1, padx=5, pady=5) message_button = Button(text="Click Me", command=display_full_name) message_button.grid(row=2,column=1, padx=5, pady=5, sticky="e") root.mainloop() 

скриншот

7.1.1. Методы Entry¶

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

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

Используем методы в программе:

from tkinter import * from tkinter import messagebox def clear(): name_entry.delete(0, END) surname_entry.delete(0, END) def display(): messagebox.showinfo("GUI Python", name_entry.get() + " " + surname_entry.get()) root = Tk() root.title("GUI на Python") name_label = Label(text="Введите имя:") surname_label = Label(text="Введите фамилию:") name_label.grid(row=0, column=0, sticky="w") surname_label.grid(row=1, column=0, sticky="w") name_entry = Entry() surname_entry = Entry() name_entry.grid(row=0,column=1, padx=5, pady=5) surname_entry.grid(row=1,column=1, padx=5, pady=5) # вставка начальных данных name_entry.insert(0, "Tom") surname_entry.insert(0, "Soyer") display_button = Button(text="Display", command=display) clear_button = Button(text="Clear", command=clear) display_button.grid(row=2, column=0, padx=5, pady=5, sticky="e") clear_button.grid(row=2, column=1, padx=5, pady=5, sticky="e") root.mainloop() 

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

name_entry.insert(0, "Tom") surname_entry.insert(0, "Soyer") 

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

def clear(): name_entry.delete(0, END) surname_entry.delete(0, END) 

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

def display(): messagebox.showinfo("GUI Python", name_entry.get() + " " + surname_entry.get()) 

Причем, как видно из примера, нам необязательно обращаться к тексту в Entry через переменные типа StringVar, мы можем это сделать напрямую через метод get.

7.2. Многострочное текстовое поле¶

Text() предназначен для предоставления пользователю возможности ввода не одной строки текста, а существенно больше:

tex = Text(root,width=40, font="Verdana 12", wrap=WORD) 

Последнее свойство (wrap) в зависимости от своего значения позволяет переносить текст, вводимый пользователем либо по символам, либо по словам, либо вообще не переносить, пока пользователь не нажмет Enter.

7.2.1. Упражнения¶

  1. Напишите программы, описанные в уроке.
  2. Создайте пример трёх программ с использованием многострочного текстового поля.

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

Элемент 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()

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

entry.insert(0, "Hello World")

Кнопка 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

[Tkinter] Как получить значение переменной из entry?

Как в Tkinter задавать координаты для класса Entry?
Доброго времени суток. Не смог решить проблему, как вставить в нужное место поле для текстового.

Как сделать кнопку суммирования значений двух Entry в Tkinter?
Привет, не могу решить задачу по GUI, Python. Не могли бы вы мне подсказать, как вывести функцию.

Не могу получить значение из Entry
При выводе принта, не выводит значение. import tkinter as tk from functools import partial.

Entry Tkinter
Привет всем, задача стоит в том чтоб посчитать определенный интеграл на Tkinter'e.Пользователь.

135 / 120 / 37
Регистрация: 30.09.2012
Сообщений: 400

Лучший ответ

Сообщение было отмечено Aydar1313 как решение

Решение

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

tkinter entry
Доброго времени суток Вот есть такое окно from tkinter import * def win(): root = Tk() .

Tkinter и Entry
Доброго времени суток! Для вуза надо написать лабораторную работу.Все довольно.

Tkinter. Валидация Entry
Всем доброго времени суток! Подскажите, пожалуйста, как я могу валидировать вводимое в Entry.

Функция entry tkinter
Не могу понять как реализовать ввод радиуса Код выводит график кардиоиды при нажатии кнопки Draw .

Проблема с Tkinter: entry.get() не работает
Я понимаю, что дело в том, что entry находится в другом классе, но не могу понять как сделать так.

Виджеты Button, Label, Entry

В этом уроке рассмотрим подробнее три наиболее простых и часто используемых виджета GUI – кнопку, метку и однострочное текстовое поле. В tkinter объекты этих элементов интерфейса порождаются соответственно от классов Button , Label и Entry .

Свойства и методы виджетов бывают относительно общими, характерными для многих типов, а также частными, зачастую встречающимися только у какого-то одного класса. В любом случае список настраиваемых свойств велик. В этом курсе мы будем рассматривать только ключевые свойства и методы классов пакета tkinter .

В Tkinter существует три способа конфигурирования свойств виджетов:

  • в момент создания объекта,
  • с помощью метода config , он же configure ,
  • путем обращения к свойству как к элементу словаря.

Button – кнопка

Самыми важными свойствами виджета класса Button являются text , с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку.

По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа (количество символов).

Такие свойства как bg , fg , activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия и установки курсора мыши над кнопкой.

from tkinter import * def change(): b1['text'] = "Изменено" b1['bg'] = '#000000' b1['fg'] = '#ffffff' b1['activebackground'] = '#555555' b1['activeforeground'] = '#ffffff' root = Tk() b1 = Button(text="Изменить", width=15, height=3) b1.config(command=change) b1.pack() root.mainloop()

Здесь значение свойства command устанавливается с помощью метода config . Однако можно было сделать и так: b1['command'] = change . Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:

Пример изменения свойств виджета-кнопки

Label – метка

Виджет Label просто отображает текст в окне и служит в основном для информационных целей (вывод сообщений, подпись других элементов интерфейса). Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command . Поэтому связать их с событием можно только с помощью метода bind .

На примере объекта типа Label рассмотрим свойство font – шрифт.

from tkinter import * root = Tk() l1 = Label(text="Машинное обучение", font="Arial 32") l2 = Label(text="Распознавание образов", font=("Comic Sans MS", 24, "bold")) l1.config(bd=20, bg='#ffaaaa') l2.config(bd=20, bg='#aaffff') l1.pack() l2.pack() root.mainloop()

Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.

Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ. Здесь единицей измерения является пиксель.

Конфигурирование свойств Label

Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:

from tkinter import * def take(): lab['text'] = "Выдано" root = Tk() Label(text="Пункт выдачи").pack() Button(text="Взять", command=take).pack() lab = Label(width=10, height=1) lab.pack() root.mainloop()

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

Entry – однострочное текстовое поле

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

Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get . В текстовое поле можно вставить текст методом insert . Также можно удалить текст методом delete .

Метод insert принимает позицию, в которую надо вставлять текст, и сам текст. Такой код

from tkinter import * from datetime import datetime as dt def insert_time(): t = dt.now().time() e1.insert(0, t.strftime('%H:%M:%S ')) root = Tk() e1 = Entry(width=50) but = Button(text="Время", command=insert_time) e1.pack() but.pack() root.mainloop()

приведет к тому, что после каждого нажатия на кнопку будет вставляться новое время перед уже существующей в поле строкой.

Метод insert объекта Entry

Если 0 в insert заменить на константу END , то вставляться будет в конец. Можно указать любое число-индекс знакоместа, тогда вставка будет производиться куда-либо в середину строки.

Метод delete принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END .

Практическая работа

Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.

Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.

Примерно должно получиться так:

Пример программы с текстовым полем и кнопками

Для выравнивания строки по центру в текстовом поле используется свойство justify со значением CENTER .

Курс с примерами решений практических работ: pdf-версия

X Скрыть Наверх

Tkinter. Программирование GUI на Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *