Entry - Однострочное текстовое поле
Элемент 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: ширина элемента
Пример entry 1:
from tkinter import *
root = Tk()
root.title("Welcome to entry app")
text = Entry(root, width=50)
text.pack()
root.mainloop()
2
3
4
5
6
7
Результат выполнения:
Пример entry 2:
from tkinter import *
root = Tk()
root.title("Welcome to the second entry app")
text1 = Entry(root, width=20)
text1.pack()
text2 = Entry(root, width=50)
text2.pack()
root.mainloop()
2
3
4
5
6
7
8
9
Результат выполнения:
Пример entry 3:
from tkinter import *
root = Tk()
root.title("Welcome to the second entry app")
label_login = Label(root, text="Login")
label_login.pack()
text1 = Entry(root, width=50)
text1.pack()
label_pass = Label(root, text="Password")
label_pass.pack()
text2 = Entry(root, width=50)
text2.pack()
button = Button(root, text="Enter")
button.pack()
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Результат выполнения:
Пример entry 3:
from tkinter import *
def check_pass():
if entry_login.get() and entry_pass.get():
label_welcome.configure(text="Welcome!!!")
else:
label_welcome.configure(text="Please enter the login\nand the password.")
root = Tk()
root.title("Welcome to the second entry app")
label_login = Label(root, text="Login")
label_login.pack()
entry_login = Entry(root, width=10)
entry_login.pack()
label_pass = Label(root, text="Password")
label_pass.pack()
entry_pass = Entry(root, width=10, show='%')
entry_pass.pack()
button = Button(root, text="Enter", command=check_pass)
button.pack()
label_welcome = Label(root)
label_welcome.pack()
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Для работы с текстом, находящимся в текстовом поле, необходимо создать переменную в которой будут храниться значения, которые будут выводиться или считываться в текстовом поле. Общий вид программы зададим следующий:
from tkinter import *
root = Tk()
root.title("Welcome to entry app")
message = StringVar()
message.set("Any")
text = Entry(root, width=10, textvariable=message)
text.pack()
root.mainloop()
2
3
4
5
6
7
8
9
10
11
Здесь команда message.set(«Any») - устанавливает значение переменной равное строке «Any». И параметру textvariable присваивается значение переменной message.
Исследуйте переменную message добавив недостающий следующий код:
message = StringVar()
print(message)
print(type(message))
message.set("Any")
print(message)
print(message.get())
2
3
4
5
6
Подумайте над последовательностью и работой команд message.set()
и message.get()
. Что происходит при выполнении каждой из команд?
Определим элемент 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.pack()
message_button = Button(text="Click Me", command=show_message)
message_button.pack()
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Результат выполнения:
Для вывода сообщения здесь применяется дополнительный модуль 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_label = Label(text="Введите имя:")
name_label.grid(row=0, column=0, sticky="w")
name = StringVar()
name_entry = Entry(textvariable=name)
name_entry.grid(row=0, column=1)
surname_label = Label(text="Введите фамилию:")
surname_label.grid(row=1, column=0, sticky="w")
surname = StringVar()
surname_entry = Entry(textvariable=surname)
surname_entry.grid(row=1, column=1)
message_button = Button(text="Click Me", command=display_full_name)
message_button.grid(row=2, column=1)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Результат выполнения:
Методы 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="Введите имя:")
name_label.grid(row=0, column=0, sticky="w")
name_entry = Entry()
name_entry.grid(row=0,column=1)
name_entry.insert(0, "Tom")
surname_label = Label(text="Введите фамилию:")
surname_label.grid(row=1, column=0, sticky="w")
surname_entry = Entry()
surname_entry.grid(row=1, column=1)
surname_entry.insert(0, "Soyer")
display_button = Button(text="Display", command=display)
display_button.grid(row=2, column=0)
clear_button = Button(text="Clear", command=clear)
clear_button.grid(row=2, column=1)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
При запуске программы в оба текстовых поля добавляется текст по умолчанию:
name_entry.insert(0, "Tom")
surname_entry.insert(0, "Soyer")
2
Кнопка Clear очищает оба поля, вызывая метод .delete()
:
def clear():
name_entry.delete(0, END)
surname_entry.delete(0, END)
2
3
Вторая кнопка, используя метод .get()
, получает введенный текст:
def display():
messagebox.showinfo("GUI Python", name_entry.get() + " " + surname_entry.get())
2
Как видно из примера, нам необязательно обращаться к тексту в Entry()
через переменные типа StringVar()
, можно это сделать напрямую через метод .get()
.
Упражнения
Создайте окно с текстовым полем
Entry
, и задайте значение текстового поля: «Текстовое поле вводит и выводит текст только одной строкой», используя метод.insert()
.Используя переменную
StringVar()
. Создайте окно с текстовым полем и двумя кнопками:- кнопкой "Paste", при нажатии на которую, в текстовом поле выводится текст: "The button clicked!".
- кнопкой "Clear", при нажатии на которую, текст в текстовом поле стирается.
Используя методы
.insert()
и.delete()
для текстового поля. Создайте окно с текстовым полем и двумя кнопками:- кнопкой "Paste", при нажатии на которую, в текстовом поле выводится текст: "The button clicked!".
- кнопкой "Clear", при нажатии на которую, текст в текстовом поле стирается.
Используя переменную
StringVar()
. Создайте окно с текстовым полем и кнопкой "Copy", при нажатии на которую, выводится значение текстового поля в консоль.Вывод в консоль после нажатия кнопки "Copy":
text from entry
1Используя команды
.get()
для виджета текстового поля. Создайте окно с текстовым полем и кнопкой "Copy", при нажатии на которую, выводится значение текстового поля в консоль.Создайте программу с двумя текстовыми полями и двумя кнопками.
- при нажати на первую кнопку, должны выводиться значения первого и второго полей в консоль:
The first line The second line
1
2- при нажатии на вторую кнопку, должны выводиться значения первого и второго полей в консоль с пояснениями в виде:
"Значение первого поля: <The first line>" "Значение второго поля: <The second line>"
1
2Создайте окно с двумя однострочными текстовыми полями и кнопкой, при нажатии на которую, значение первого текстового поля будет выводиться во втором текстовом поле.
Создайте окно с двумя однострочными текстовыми полями и кнопкой, при нажатии на которую, значение первого текстового поля будет выводиться во втором текстовом поле, с примечанием:
«<текст первого теля>», - it is the first entry's contents
.Создайте окно с тремя однострочными текстовыми полями и кнопкой, при нажатии на которую, значения первого и второго текстовых полей будут выводиться в третьем текстовом поле.