Как изменить цвет entry tkinter

Текстовое поле ввода Entry в tkinter и Python, его методы и параметры, отслеживание ввода текста

Последнее обновление: 23.09.2022

Элемент 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{0,11}$", 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("^+{0,1}d{0,11}$", newval) is not None
    if not result and len(newval) <= 12:
        errmsg.set("Номер телефона должен быть в формате +xxxxxxxxxxx, где x представляет цифру")
    else:
        errmsg.set("")
    return result

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

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

errmsg = StringVar()

phone_entry = ttk.Entry(validate="key", validatecommand=check) 
phone_entry.pack(padx=5, pady=5, anchor=NW)

error_label = ttk.Label(foreground="red", textvariable=errmsg, wraplength=250)
error_label.pack(padx=5, pady=5, anchor=NW)

root.mainloop()

Здесь для вывода ошибок валидации добавлен виджет 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{0,11}$", newval) is not None
    if op=="key":
        # некоторые действия
    elif op=="focus":
        # некоторые действия
    return result

Текстовые поля можно разделить на два основных типа:

  • однострочное — Entry()
  • многострочное — Text()

7.1. Однострочное текстовое поле¶

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

где 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 *

window = Tk()
window.title("Welcome to entry app")
txt = Entry(window, width=10)
txt.pack()
window.mainloop()

Результат выполнения:

скриншот

Пример entry 2:

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()

Результат выполнения:

скриншот

Пример entry 3:

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()

Результат выполнения:

скриншот

Пример entry 3:

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. Создайте пример трёх программ с использованием многострочного текстового поля.

В этом уроке мы узнаем, как разрабатывать графические пользовательские интерфейсы, с помощью разбора некоторых примеров графического интерфейса Python с использованием библиотеки Tkinter.

Библиотека Tkinter установлена в Python в качестве стандартного модуля, поэтому нам не нужно устанавливать что-либо для его использования. Tkinter — очень мощная библиотека. Если вы уже установили Python, можете использовать IDLE, который является интегрированной IDE, поставляемой в Python, эта IDE написана с использованием Tkinter. Звучит круто!

Мы будем использовать Python 3.7 поэтому, если вы все еще используете Python 2.x, настоятельно рекомендуем перейти на Python 3.x, если вы не в курсе нюансов изменения языка, с целью, чтобы вы могли настроить код для запуска без ошибок.

Давайте предположим, что у вас уже есть базовые знания по Python, которые помогут понять что мы будем делать.
Мы начнем с создания окна, в котором мы узнаем, как добавлять виджеты, такие, как кнопки, комбинированные поля и т. д. После этого поэкспериментируем со своими свойствами, поэтому предлагаю начать.

Создание своего первого графического интерфейса

Для начала, следует импортировать Tkinter и создать окно, в котором мы зададим его название:

from tkinter import *


window = Tk()
window.title("Добро пожаловать в приложение PythonRu")
window.mainloop()

Результат будет выглядеть следующим образом:
Обучение Python GUI (уроки по Tkinter)Прекрасно! Наше приложение работает.
Последняя строка вызывает функцию mainloop. Эта функция вызывает бесконечный цикл окна, поэтому окно будет ждать любого взаимодействия с пользователем, пока не будет закрыто.

В случае, если вы забудете вызвать функцию mainloop , для пользователя ничего не отобразится.

Создание виджета Label

Чтобы добавить текст в наш предыдущий пример, мы создадим lbl , с помощью класса Label, например:

lbl = Label(window, text="Привет")

Затем мы установим позицию в окне с помощью функции grid и укажем ее следующим образом:

lbl.grid(column=0, row=0)

Полный код, будет выглядеть следующим образом:

from tkinter import *  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
lbl = Label(window, text="Привет")  
lbl.grid(column=0, row=0)  
window.mainloop()

И вот как будет выглядеть результат:
Обучение Python GUI (уроки по Tkinter)Если функция grid не будет вызвана, текст не будет отображаться.

Настройка размера и шрифта текста

Вы можете задать шрифт текста и размер. Также можно изменить стиль шрифта. Для этого передайте параметр font таким образом:

lbl = Label(window, text="Привет", font=("Arial Bold", 50))

Обучение Python GUI (уроки по Tkinter)Обратите внимание, что параметр font может быть передан любому виджету, для того, чтобы поменять его шрифт, он применяется не только к Label.

Отлично, но стандартное окно слишком мало. Как насчет настройки размера окна?

Настройка размеров окна приложения

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

window.geometry('400x250')

В приведенной выше строке устанавливается окно шириной до 400 пикселей и высотой до 250 пикселей.

Попробуем добавить больше виджетов GUI, например, кнопки и посмотреть, как обрабатывается нажатие кнопок.

Добавление виджета Button

Начнем с добавления кнопки в окно. Кнопка создается и добавляется в окно так же, как и метка:

btn = Button(window, text="Не нажимать!")
btn.grid(column=1, row=0)

Наш код будет выглядеть вот так:

from tkinter import *  
  

window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
lbl = Label(window, text="Привет", font=("Arial Bold", 50))  
lbl.grid(column=0, row=0)  
btn = Button(window, text="Не нажимать!")  
btn.grid(column=1, row=0)  
window.mainloop()

Результат будет следующим:
Обучение Python GUI (уроки по Tkinter)Обратите внимание, что мы помещаем кнопку во второй столбец окна, что равно 1. Если вы забудете и поместите кнопку в том же столбце, который равен 0, он покажет только кнопку.

Изменение цвета текста и фона у Button

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

btn = Button(window, text="Не нажимать!", bg="black", fg="red")

Обучение Python GUI (уроки по Tkinter)Теперь, если вы попытаетесь щелкнуть по кнопке, ничего не произойдет, потому что событие нажатия кнопки еще не написано.

Кнопка Click

Для начала, мы запишем функцию, которую нужно выполнить при нажатии кнопки:

def clicked():
    lbl.configure(text="Я же просил...")

Затем мы подключим ее с помощью кнопки, указав следующую ​​функцию:

btn = Button(window, text="Не нажимать!", command=clicked)

Обратите внимание: мы пишем clicked, а не clicked()с круглыми скобками. Теперь полный код будет выглядеть так:

from tkinter import *  
  
  
def clicked():  
    lbl.configure(text="Я же просил...")  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
lbl = Label(window, text="Привет", font=("Arial Bold", 50))  
lbl.grid(column=0, row=0)  
btn = Button(window, text="Не нажимать!", command=clicked)  
btn.grid(column=1, row=0)  
window.mainloop()

При нажатии на кнопку, результат, как и ожидалось, будет выглядеть следующим образом:
Обучение Python GUI (уроки по Tkinter)Круто!

Получение ввода с использованием класса Entry (текстовое поле Tkinter)

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

txt = Entry(window, width=10)

Затем вы можете добавить его в окно, используя функцию grid.
Наше окно будет выглядеть так:

from tkinter import *  
  
  
def clicked():  
    lbl.configure(text="Я же просил...")  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
lbl = Label(window, text="Привет")  
lbl.grid(column=0, row=0)  
txt = Entry(window,width=10)  
txt.grid(column=1, row=0)  
btn = Button(window, text="Не нажимать!", command=clicked)  
btn.grid(column=2, row=0)  
window.mainloop()

Полученный результат будет выглядеть так:
Обучение Python GUI (уроки по Tkinter)Теперь, если вы нажмете кнопку, она покажет то же самое старое сообщение, но что же будет с отображением введенного текста в виджет Entry?

Во-первых, вы можете получить текст ввода, используя функцию get. Мы можем записать код для выбранной функции таким образом:

def clicked():
    res = "Привет {}".format(txt.get())
    lbl.configure(text=res)

Если вы нажмете на кнопку — появится текст «Привет » вместе с введенным текстом в виджете записи. Вот полный код:

from tkinter import *  
  
  
def clicked():  
    res = "Привет {}".format(txt.get())  
    lbl.configure(text=res)  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
lbl = Label(window, text="Привет")  
lbl.grid(column=0, row=0)  
txt = Entry(window,width=10)  
txt.grid(column=1, row=0)  
btn = Button(window, text="Клик!", command=clicked)  
btn.grid(column=2, row=0)  
window.mainloop()

Запустите вышеуказанный код и проверьте результат:
Обучение Python GUI (уроки по Tkinter)Прекрасно!

Каждый раз, когда мы запускаем код, нам нужно нажать на виджет ввода, чтобы настроить фокус на ввод текста, но как насчет автоматической настройки фокуса?

Установка фокуса виджета ввода

Здесь все очень просто, ведь все, что нам нужно сделать, — это вызвать функцию focus:

txt.focus()

Когда вы запустите свой код, вы заметите, что виджет ввода в фокусе, который дает возможность сразу написать текст.

Отключить виджет ввода

Чтобы отключить виджет ввода, отключите свойство состояния:

txt = Entry(window,width=10, state='disabled')

Обучение Python GUI (уроки по Tkinter)Теперь вы не сможете ввести какой-либо текст.

Добавление виджета Combobox

Чтобы добавить виджет поля с выпадающем списком, используйте класс Combobox из ttk следующим образом:

from tkinter.ttk import Combobox


combo = Combobox(window)

Затем добавьте свои значения в поле со списком.

from tkinter import *  
from tkinter.ttk import Combobox  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
combo = Combobox(window)  
combo['values'] = (1, 2, 3, 4, 5, "Текст")  
combo.current(1)  # установите вариант по умолчанию  
combo.grid(column=0, row=0)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Как видите с примера, мы добавляем элементы combobox, используя значения tuple.
Чтобы установить выбранный элемент, вы можете передать индекс нужного элемента текущей функции.
Чтобы получить элемент select, вы можете использовать функцию get вот таким образом:

combo.get()

Добавление виджета Checkbutton (чекбокса)

С целью создания виджета checkbutton, используйте класс Checkbutton:

from tkinter.ttk import Checkbutton


chk = Checkbutton(window, text='Выбрать')

Кроме того, вы можете задать значение по умолчанию, передав его в параметр var в Checkbutton:

from tkinter import *  
from tkinter.ttk import Checkbutton  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
chk_state = BooleanVar()  
chk_state.set(True)  # задайте проверку состояния чекбокса  
chk = Checkbutton(window, text='Выбрать', var=chk_state)  
chk.grid(column=0, row=0)  
window.mainloop()

Посмотрите на результат:
Обучение Python GUI (уроки по Tkinter)

Установка состояния Checkbutton

Здесь мы создаем переменную типа BooleanVar, которая не является стандартной переменной Python, это переменная Tkinter, затем передаем ее классу Checkbutton, чтобы установить состояние чекбокса как True в приведенном выше примере.

Вы можете установить для BooleanVar значение false, что бы чекбокс не был отмечен.
Так же, используйте IntVar вместо BooleanVar и установите значения 0 и 1.

chk_state = IntVar()
chk_state.set(0) # False
chk_state.set(1) # True

Эти примеры дают тот же результат, что и BooleanVar.

Добавление виджетов Radio Button

Чтобы добавить radio кнопки, используйте класс RadioButton:

rad1 = Radiobutton(window,text='Первый', value=1)

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

from tkinter import *  
from tkinter.ttk import Radiobutton  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
rad1 = Radiobutton(window, text='Первый', value=1)  
rad2 = Radiobutton(window, text='Второй', value=2)  
rad3 = Radiobutton(window, text='Третий', value=3)  
rad1.grid(column=0, row=0)  
rad2.grid(column=1, row=0)  
rad3.grid(column=2, row=0)  
window.mainloop()

Результатом вышеприведенного кода будет следующий:
Обучение Python GUI (уроки по Tkinter)Кроме того, вы можете задать command любой из этих кнопок для определенной функции. Если пользователь нажимает на такую кнопку, она запустит код функции.
Вот пример:

rad1 = Radiobutton(window,text='Первая', value=1, command=clicked)

def clicked():
    # Делайте, что нужно

Достаточно легко!

Получение значения Radio Button (Избранная Radio Button)

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

from tkinter import *  
from tkinter.ttk import Radiobutton  
  
  
def clicked():  
    lbl.configure(text=selected.get())  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
selected = IntVar()  
rad1 = Radiobutton(window,text='Первый', value=1, variable=selected)  
rad2 = Radiobutton(window,text='Второй', value=2, variable=selected)  
rad3 = Radiobutton(window,text='Третий', value=3, variable=selected)  
btn = Button(window, text="Клик", command=clicked)  
lbl = Label(window)  
rad1.grid(column=0, row=0)  
rad2.grid(column=1, row=0)  
rad3.grid(column=2, row=0)  
btn.grid(column=3, row=0)  
lbl.grid(column=0, row=1)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Каждый раз, когда вы выбираете radio button, значение переменной будет изменено на значение кнопки.

Добавление виджета ScrolledText (текстовая область Tkinter)

Чтобы добавить виджет ScrolledText, используйте класс ScrolledText:

from tkinter import scrolledtext


txt = scrolledtext.ScrolledText(window,width=40,height=10)

Здесь нужно указать ширину и высоту ScrolledText, иначе он заполнит все окно.

from tkinter import *  
from tkinter import scrolledtext  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
txt = scrolledtext.ScrolledText(window, width=40, height=10)  
txt.grid(column=0, row=0)  
window.mainloop()

Результат:
Обучение Python GUI (уроки по Tkinter)

Настройка содержимого Scrolledtext

Используйте метод insert, чтобы настроить содержимое Scrolledtext:

txt.insert(INSERT, 'Текстовое поле')

Удаление/Очистка содержимого Scrolledtext

Чтобы очистить содержимое данного виджета, используйте метод delete:

txt.delete(1.0, END)  # мы передали координаты очистки

Отлично!

Создание всплывающего окна с сообщением

Чтобы показать всплывающее окно с помощью Tkinter, используйте messagebox следующим образом:

from tkinter import messagebox


messagebox.showinfo('Заголовок', 'Текст')

Довольно легко! Давайте покажем окно сообщений при нажатии на кнопку пользователем.

from tkinter import *  
from tkinter import messagebox  
  
  
def clicked():  
    messagebox.showinfo('Заголовок', 'Текст')  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
btn = Button(window, text='Клик', command=clicked)  
btn.grid(column=0, row=0)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Когда вы нажмете на кнопку, появится информационное окно.

Показ сообщений о предупреждениях и ошибках

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

messagebox.showwarning('Заголовок', 'Текст')  # показывает предупреждающее сообщение
messagebox.showerror('Заголовок', 'Текст')  # показывает сообщение об ошибке

Показ диалоговых окон с выбором варианта

Чтобы показать пользователю сообщение “да/нет”, вы можете использовать одну из следующих функций messagebox:

from tkinter import messagebox


res = messagebox.askquestion('Заголовок', 'Текст')
res = messagebox.askyesno('Заголовок', 'Текст')
res = messagebox.askyesnocancel('Заголовок', 'Текст')
res = messagebox.askokcancel('Заголовок', 'Текст')
res = messagebox.askretrycancel('Заголовок', 'Текст')

Вы можете выбрать соответствующий стиль сообщения согласно вашим потребностям. Просто замените строку функции showinfo на одну из предыдущих и запустите скрипт. Кроме того, можно проверить, какая кнопка нажата, используя переменную результата.

Если вы кликнете OK, yes или retry, значение станет True, а если выберете no или cancel, значение будет False.
Единственной функцией, которая возвращает одно из трех значений, является функция askyesnocancel; она возвращает True/False/None.

Добавление SpinBox (Виджет спинбокс)

Для создания виджета спинбокса, используйте класс Spinbox:

spin = Spinbox(window, from_=0, to=100)

Таким образом, мы создаем виджет Spinbox, и передаем параметры from и to, чтобы указать диапазон номеров.
Кроме того, вы можете указать ширину виджета с помощью параметра width:

spin = Spinbox(window, from_=0, to=100, width=5)

Проверим пример полностью:

from tkinter import *  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
spin = Spinbox(window, from_=0, to=100, width=5)  
spin.grid(column=0, row=0)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Вы можете указать числа для Spinbox, вместо использования всего диапазона следующим образом:

spin = Spinbox(window, values=(3, 8, 11), width=5)

Виджет покажет только эти 3 числа: 3, 8 и 11.

Задать значение по умолчанию для Spinbox

В случае, если вам нужно задать значение по умолчанию для Spinbox, вы можете передать значение параметру textvariable следующим образом:

var = IntVar()
var.set(36)
spin = Spinbox(window, from_=0, to=100, width=5, textvariable=var)

Теперь, если вы запустите программу, она покажет 36 как значение по умолчанию для Spinbox.

Добавление виджета Progressbar

Чтобы создать данный виджет, используйте класс progressbar :

from tkinter.ttk import Progressbar


bar = Progressbar(window, length=200)

Установите значение progressbar таким образом:

bar['value'] = 70

Вы можете установить это значение на основе любого процесса или при выполнении задачи.

Изменение цвета Progressbar

Изменение цвета Progressbar немного сложно. Сначала нужно создать стиль и задать цвет фона, а затем настроить созданный стиль на Progressbar. Посмотрите следующий пример:

from tkinter import *  
from tkinter.ttk import Progressbar  
from tkinter import ttk  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
style = ttk.Style()  
style.theme_use('default')  
style.configure("black.Horizontal.TProgressbar", background='black')  
bar = Progressbar(window, length=200, style='black.Horizontal.TProgressbar')  
bar['value'] = 70  
bar.grid(column=0, row=0)  
window.mainloop()

И в результате вы получите следующее:
Обучение Python GUI (уроки по Tkinter)

Добавление поля загрузки файла

Для добавления поля с файлом, используйте класс filedialog:

from tkinter import filedialog


file = filedialog.askopenfilename()

После того, как вы выберете файл, нажмите “Открыть”; переменная файла будет содержать этот путь к файлу. Кроме того, вы можете запросить несколько файлов:

files = filedialog.askopenfilenames()

Указание типа файлов (расширение фильтра файлов)

Возможность указания типа файлов доступна при использовании параметра filetypes, однако при этом важно указать расширение в tuples.

file = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all files","*.*")))

Вы можете запросить каталог, используя метод askdirectory :

dir = filedialog.askdirectory()

Вы можете указать начальную директорию для диалогового окна файла, указав initialdir следующим образом:

from os import path
file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

Легко!

Добавление панели меню

Для добавления панели меню, используйте класс menu:

from tkinter import Menu


menu = Menu(window)
menu.add_command(label='Файл')
window.config(menu=menu)

Сначала мы создаем меню, затем добавляем наш первый пункт подменю. Вы можете добавлять пункты меню в любое меню с помощью функции add_cascade() таким образом:

menu.add_cascade(label='Автор', menu=new_item)

Наш код будет выглядеть так:

from tkinter import *  
from tkinter import Menu  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
menu = Menu(window)  
new_item = Menu(menu)  
new_item.add_command(label='Новый')  
menu.add_cascade(label='Файл', menu=new_item)  
window.config(menu=menu)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Таким образом, вы можете добавить столько пунктов меню, сколько захотите.

from tkinter import *  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
menu = Menu(window)  
new_item = Menu(menu)  
new_item.add_command(label='Новый')  
new_item.add_separator()  
new_item.add_command(label='Изменить')  
menu.add_cascade(label='Файл', menu=new_item)  
window.config(menu=menu)  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Теперь мы добавляем еще один пункт меню “Изменить” с разделителем меню. Вы можете заметить пунктирную линию в начале, если вы нажмете на эту строку, она отобразит пункты меню в небольшом отдельном окне.

Можно отключить эту функцию, с помощью tearoff подобным образом:

new_item = Menu(menu, tearoff=0)

Просто отредактируйте new_item, как в приведенном выше примере и он больше не будет отображать пунктирную линию.
Вы так же можете ввести любой код, который работает, при нажатии пользователем на любой элемент меню, задавая свойство команды.

new_item.add_command(label='Новый', command=clicked)

Добавление виджета Notebook (Управление вкладкой)

Для удобного управления вкладками реализуйте следующее:

  • Для начала, создается элемент управления вкладкой, с помощью класса Notebook .
  • Создайте вкладку, используя класс Frame.
  • Добавьте эту вкладку в элемент управления вкладками.
  • Запакуйте элемент управления вкладкой, чтобы он стал видимым в окне.
from tkinter import *  
from tkinter import ttk  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
tab_control = ttk.Notebook(window)  
tab1 = ttk.Frame(tab_control)  
tab_control.add(tab1, text='Первая')  
tab_control.pack(expand=1, fill='both')  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)Таким образом, вы можете добавлять столько вкладок, сколько нужно.

Добавление виджетов на вкладку

После создания вкладок вы можете поместить виджеты внутри этих вкладок, назначив родительское свойство нужной вкладке.

from tkinter import *  
from tkinter import ttk  
  
  
window = Tk()  
window.title("Добро пожаловать в приложение PythonRu")  
window.geometry('400x250')  
tab_control = ttk.Notebook(window)  
tab1 = ttk.Frame(tab_control)  
tab2 = ttk.Frame(tab_control)  
tab_control.add(tab1, text='Первая')  
tab_control.add(tab2, text='Вторая')  
lbl1 = Label(tab1, text='Вкладка 1')  
lbl1.grid(column=0, row=0)  
lbl2 = Label(tab2, text='Вкладка 2')  
lbl2.grid(column=0, row=0)  
tab_control.pack(expand=1, fill='both')  
window.mainloop()

Обучение Python GUI (уроки по Tkinter)

Добавление интервала для виджетов (Заполнение)

Вы можете добавить отступы для элементов управления, чтобы они выглядели хорошо организованными с использованием свойств padx иpady.

Передайте padx и pady любому виджету и задайте значение.

lbl1 = Label(tab1, text= 'label1', padx=5, pady=5)

Это очень просто!

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

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Tkinter is a GUI (Graphical User Interface) module which is widely used to create GUI applications. It comes along with the Python itself.

    Entry widgets are used to get the entry from the user. It can be created as follows-

     entry = ttk.Entry(master, option = value, ...) 

    Code #1: Creating Entry widget and taking input from user (taking only String data).

    from tkinter import * 

    from tkinter import ttk

    from tkinter.messagebox import askyesno

    root = Tk()

    root.geometry('200x100')

    input_text = StringVar()

    entry1 = ttk.Entry(root, textvariable = input_text, justify = CENTER)

    entry1.focus_force()

    entry1.pack(side = TOP, ipadx = 30, ipady = 6)

    save = ttk.Button(root, text = 'Save', command = lambda : askyesno(

                                    'Confirm', 'Do you want to save?'))

    save.pack(side = TOP, pady = 10)

    root.mainloop()

    Output:
    Creating Entry widget and taking input from user 1

    Creating Entry widget and taking input from user 2

    In above output, as soon as you run the code a Tkinter window will appear and Entry widget is already focussed that means we don’t have to give focus to the Entry area.
    When we press Button a confirmation message will appear, saying whether you want to save the text or not (it will not save the text, it is only used to show the functioning of Button).

     Code #2: Adding Style to the entered text in Entry widget.

    from tkinter import * 

    from tkinter import ttk

    from tkinter.messagebox import askyesno

    root = Tk()

    root.geometry('200x100')

    input_text = StringVar()

    style = ttk.Style()

    style.configure('TEntry', foreground = 'green')

    entry1 = ttk.Entry(root, textvariable = input_text, justify = CENTER,

                                         font = ('courier', 15, 'bold'))   

    entry1.focus_force()

    entry1.pack(side = TOP, ipadx = 30, ipady = 10)

    save = ttk.Button(root, text = 'Save', command = lambda : askyesno(

                                     'Confirm', 'Do you want to save?'))

    save.pack(side = TOP, pady = 10)

    root.mainloop()

    Output:
    Adding Style to the entered text in Entry widget
    In the above output, you may notice that the color of the font is changed, font family is changed, size of the text is bigger than normal as well as text is written in bold. This is because we are adding style to the input text.


    We will keep one Label along with a Entry box.
    Basics of Python Tkinter

    User input for single line of text. ( for multi line of text use Text)

    t1=tk.Entry(parent_window,options)

    parent_window : Declared Parent window
    options : Various options can be added, list is given below.
    Entry for text input

    import tkinter as tk
    my_w = tk.Tk()
    my_w.geometry("250x150")  
    my_w.title("plus2net.com")  # Adding a title
    
    l1 = tk.Label(my_w,  text='Your Name', width=10 )  # added one Label 
    l1.grid(row=1,column=1) 
    
    e1 = tk.Entry(my_w,   width=20,bg='yellow') # added one Entry box
    e1.grid(row=1,column=2) 
    
    my_w.mainloop()

    Tkinter entry widget with options and methods to manage user inputs. Reading & setting default data

    Options

    bg Color of the background. We can use Hex value or colour name. ( bg=’green’ or bg=’#ffff00′)
    bd Border size, default value is 2
    cursor Shape of the cursor while moving over the Entry widget. A list of shapes are available at Button Page.
    font font style ,size used. Check the example below
    fg font colour. Check the example below
    justify Alignment of text. Values are ‘left’,’center’ or ‘right’
    relief The borders 3 D effect style.
    It can take these values ‘raised’ , ‘sunken’ ,’flat’, ‘ridge’, ‘solid’ & ‘groove’
    selectbackground Colour of the background when text is selected
    selectforeground Colour of the font when text is selected

    selectbackground='#ffff00',selectforeground='#0000ff'
    selectborderwidth Size of the border around the selection, default value is 0
    show The entries can be masked, used when entering passwords. Check the example below.
    state Values can be ‘disabled’, ‘normal’,’readonly’. Check the example below.
    textvariable variable associated with the Entry. Used for setting or reading the user entered data. Usually StringVar is used.
    width width of the widget, default value is 20
    xscrollcommand Connecting Entry widget to a scrollbar

    Reading data of Entry box and entering data

    We can read the data entered inside the Entry text box ( e1 is the Entry box )

    e1.get()

    To Delete text of Entry box

    To clear the text available inside Entry box use this.

    e1.delete(0,END)

    Using a Reset button

    We can use one click event of a button to clear or Reset the text entered in an Entry box.

    import tkinter  as tk 
    my_w = tk.Tk()
    my_w.geometry("380x200")  
    
    e1=tk.Entry(my_w,text='plus2net',font=24)
    e1.grid(row=0,column=0,padx=5,pady=20)
    
    b1=tk.Button(my_w,text='Reset',font=24,command=lambda:e1.delete(0,'end'))
    b1.grid(row=0,column=1,padx=10,pady=20)
    my_w.mainloop()

    Resetting all Entry boxes

    Irrespective of number of Entry boxes we used in our application, we can remove all user entered data by using winfo_children() which returns all the widget classes of the Tkinter window.
    Here is the code

    for widget in my_w.winfo_children():
            if isinstance(widget, tk.Entry):  # If this is an Entry widget 
                widget.delete(0,'end') # Delete all entries 

    How Reset button is used to delete all user enterd data and selections

    Default text in Entry widget

    We can keep any default text or data from any other input system inside an Entry box. For this we will use one StringVar().

    We can bind the StringVar() e1_str to our Entry box e1. Now we are adding one default text Welcome to the Entry text.

    e1_str=tk.StringVar(my_w) # Declaring String variable
    e1 = tk.Entry(my_w,textvariable=e1_str,width=15) # added one Entry box
    e1.grid(row=1,column=2)
    e1_str.set('Welcome')

    Using the above methods we will create one application where on Click of a button the data entered by the user in Entry box is displayed and default text is changed to Welcome.
    getting & setting data from Entry

    def my_upd():
        my_str.set(e1.get()) # read and assign text to StringVar()
        e1_str.set('Welcome')# Update the Entry box text

    Here on Click of the button the function my_upd() is executed. Inside this function we will first read the text entered by user and assign the same to another Label ( l2 ) .

    In next line we will assign the string ‘Welcome’ to the StringVar() binded to Entry box ( e1 ).

    import tkinter as tk
    my_w = tk.Tk()
    my_w.geometry("250x150")  
    my_w.title("plus2net.com")  # Adding a title
    
    l1 = tk.Label(my_w,  text='Your Name', width=10 )  # added one Label 
    l1.grid(row=1,column=1) 
    e1_str=tk.StringVar()
    e1 = tk.Entry(my_w,textvariable=e1_str,width=15) # added one Entry box
    e1.grid(row=1,column=2) 
    
    b1 = tk.Button(my_w, text='Update', width=8,bg='yellow',
        command=lambda: my_upd())
    b1.grid(row=1,column=3)
    
    my_str = tk.StringVar()
    # added one Label 
    l2 = tk.Label(my_w,  text='Output',textvariable=my_str, width=10 ) 
    l2.grid(row=2,column=1) 
    
    def my_upd():
        my_str.set(e1.get()) # read and assign text to StringVar()
        e1_str.set('Welcome')# Update the Entry box text
    my_w.mainloop()

    We can change or manage different options by using config. One example is here .

    e1.config(bg='red') # change background color to red

    Similarly other properties can be updated. One similar list is available with Text entry.

    Disable or Enable Entry widget

    The option state takes three values enable , disabled & readonly

    e1 = tk.Entry(my_w,   width=20,bg='yellow', state='disabled')
    e1.grid(row=1,column=2) 

    By using config we can manage the state also.

    e1 = tk.Entry(my_w,   width=20,bg='yellow') 
    e1.grid(row=1,column=2) 
    e1.config(state='disabled')

    Password entry text

    We can mask the user entered text by using show='*' or we can use other chars show='#'

    l2 = tk.Label(my_w,  text='Output',textvariable=my_str,show='*' ) 

    Show or hide password based on Checkbutton

    validate=’key’

    We can use the option validate to trigger validation of user input. This will take values focus, focusin,focusout,kye,all,none.
    How to Validate user entered data

    validatecommand

    the callback function to execute based on validate setting.
    How to Validate user entered data

    Formatting Input

    We can format the input by using locale library.

    Formatting input data

    Listing all options

    e1.config() is a dictionary with keys as options of the entry widget. We can display all keys with its values like this.

    for options in e1.config():
        print(options + ": " + str(e1[options]))

    Sample output is here ( there are more options …. )

    background: Aqua
    bd: 1
    bg: Aqua
    borderwidth: 1
    cursor: xterm
    -----
    -----

    Tkitner entry options managing foreground & background colour with listing of all options & values

    select_range(0,’end’)

    We can select the range of text from the Entry widget by using select_range().
    How select_range() is used in Cut Copy Paste in Entry box

    Uses of Entry box

    Uses of Entry box
    In practice we will frequently come across requirement of Entry text box. Most common requirements are listed here.

    How to read the entered text.
    How to delete the entered text.
    How to configure the font colour and background colour of the text entry box.

    Copy data from first entry box to second entry on button click or using trace method in Tkinter

    We will create two Entry boxes. The first entry box e1 we will use to enter the data. On click of the Update button data from first entry box e1 will transfer to second entry box e2. One more button we will use to delete all data from second entry box e2.

    By using two buttons we can change the font colour of second entry box e2 to green or red. Similarly by using two more buttons we can change the background colour of second entry box e2.

    import tkinter as tk
    my_w = tk.Tk()
    from tkinter import *
    my_w.geometry("250x150")  
    my_w.title("plus2net.com")  # Adding a title
    
    l1 = tk.Label(my_w,  text='First' )  # added one Label 
    l1.grid(row=1,column=1) 
    e1_str=tk.StringVar()
    e1 = tk.Entry(my_w,textvariable=e1_str) # added one Entry box
    e1.grid(row=1,column=2) 
    
    
    l2 = tk.Label(my_w,  text='Second' )  # added one Label 
    l2.grid(row=2,column=1) 
    e2_str=tk.StringVar()
    e2 = tk.Entry(my_w,textvariable=e2_str) # added one Entry box
    e2.grid(row=2,column=2) 
    
    b1 = tk.Button(my_w, text='Update', width=8,
        command=lambda: my_upd())
    b1.grid(row=3,column=1)
    
    b2 = tk.Button(my_w, text='Reset', width=8,
        command=lambda: my_reset())
    b2.grid(row=3,column=2)
    ## buttons for changing font colour of Entries 
    
    b3 = tk.Button(my_w, text='fg=green', width=8,
        command=lambda: my_config('fg','green'))
    b3.grid(row=4,column=1)
    
    b4 = tk.Button(my_w, text='fg=red', width=8,
        command=lambda: my_config('fg','red'))
    b4.grid(row=4,column=2)
    
    b5 = tk.Button(my_w, text='bg=yellow', width=8,
        command=lambda: my_config('bg','yellow'))
    b5.grid(row=5,column=1)
    
    b6 = tk.Button(my_w, text='bg=blue', width=8,
        command=lambda: my_config('bg','blue'))
    b6.grid(row=5,column=2)
    
    
    def my_upd():
        e2_str.set(e1.get()) # read and assign text to StringVar()
    def my_reset():
        e1.delete(0,END) # Delete first Entry 
        e2.delete(0,END) # Delete Second Entry 
        e1.config(bg='#ffffff',fg='#000000') # reset background
        e2.config(bg='#ffffff',fg='#000000') # reset background
    def my_config(type,col):
        if type=='fg':
            e1.config(fg=col)
            e2.config(fg=col)
        elif type=='bg':
            e1.config(bg=col)
            e2.config(bg=col)
    my_w.mainloop()

    Select all text on Focus of Entry widget

    e1.bind("<FocusIn>",lambda x: e1.select_range(0,tk.END))

    Display data from Database table in Entry widget

    Displaying Data from MySQL database table in Entry widget
    First connect to database and execute the query to get data. Create a Tkinter window with Entry widget and display the data by assigning value option of StringVar.

    from sqlalchemy import create_engine
    
    # Connect to database using your user id and password
    my_conn = create_engine("mysql+mysqldb://userid:password@localhost/database_name")
    r_set = my_conn.execute("SELECT name FROM student WHERE id=6")  # execute query
    my_result = r_set.fetchone()  # get the data
    print(my_result[0])  # print to console
    
    # Create Tkitner window and show the value
    import tkinter as tk
    
    my_w = tk.Tk()
    my_w.geometry("250x150")
    my_w.title("plus2net.com")  # Adding a title
    
    l1 = tk.Label(my_w, text="Your Name", width=10)  # added one Label
    l1.grid(row=1, column=1)
    e1_str = tk.StringVar(value=my_result[0])  # default value taken from database
    e1 = tk.Entry(my_w, width=20, bg="yellow", textvariable=e1_str)  # added one Entry box
    e1.grid(row=1, column=2)
    
    my_w.mainloop()

    View and Download tkinter-entry2.ipynb file
    Tkinter Text How to Validate user entered data
    Dynamically create Entry box with Label
    Cut Copy Paste in Entry box
    Configure Background based on number of Chars entered Change Lower case to Upper case char

    Convert Feet to Meter and vice versa

    Tkinter Autocomplete using Entry & Listbox.
    simpledialog to take user inputs

    В этом руководстве мы научимся разрабатывать графические интерфейсы пользователя (GUI), написав несколько примеров GUI на Python с использованием пакета Tkinter.

    Пакет Tkinter включен в Python как стандартный, поэтому вам не нужно ничего устанавливать для его использования.

    Я предполагаю, что у вас есть некоторые базовые знания Python, которые помогут вам понять, что мы делаем.

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

    Содержание

    • 1 Создайте свое первое приложение с графическим интерфейсом
    • 2 Создание виджета label
    • 3 Установка размера шрифта метки
    • 4 Установка размера окна
    • 5 Добавление виджета кнопки
    • 6 Изменение цвета фона и шрифта кнопки.
    • 7 Обработка события нажатия кнопки
    • 8 Ввод данных с помощью класса Entry (текстовое поле Tkinter)
    • 9 Установка фокуса на виджете ввода
    • 10 Отключение виджета ввода
    • 11 Добавление виджета combobox
    • 12 Добавление виджета Checkbutton (Tkinter checkbox)
    • 13 Установка состояния Checkbutton
    • 14 Добавление виджета radio button
    • 15 Получить значение радиокнопки (выбранный вариант)
    • 16 Добавление виджета ScrolledText (Tkinter textarea)
    • 17 Установка содержимого scrolledtext.
    • 18 Удаление/очистка содержимого scrolledtext
    • 19 Создание MessageBox
    • 20 Отображение сообщений об ошибках и предупреждений
    • 21 Отображение диалоговых окон с вопросами и ответами
    • 22 Добавление SpinBox (виджет чисел)
    • 23 Установка значения по умолчанию для Spinbox
    • 24 Добавление виджета Progressbar
    • 25 Изменение цвета Progressbar
    • 26 Окно добавления файла (выбор файла и каталога).
    • 27 Указание типов файлов (фильтр по расширению)
    • 28 Добавление меню
    • 29 Добавление виджета Notebook (элемент управления вкладками)
    • 30 Добавление виджетов на вкладки
    • 31 Добавление отступов у виджетов (spacing или padding)
      • 31.1 Похожие записи

    Создайте свое первое приложение с графическим интерфейсом

    Сначала мы импортируем пакет Tkinter, создадим окно и зададим его заголовок:

    from tkinter import * window = Tk() window.title("Добро пожаловать!") window.mainloop()

    Code language: JavaScript (javascript)

    Невероятно! Наше приложение работает.

    Последняя строка вызывает функцию mainloop. Эта функция запускает бесконечный цикл окна, поэтому оно будет открыто, пока мы его сами не закроем.

    Если вы забудете вызвать функцию mainloop, пользователю ничего не будет показано.

    Создание виджета label

    Чтобы добавить метку к нашему предыдущему примеру, мы создадим ее с помощью класса label:

    lbl = Label(window, text="Привет!")

    Code language: JavaScript (javascript)

    Затем мы установим его положение с помощью функции grid вот так:

    lbl.grid(column=0, row=0)

    Итоговый код будет выглядеть следующим образом:

    from tkinter import * window = Tk() window.title("Добро пожаловать!") lbl = Label(window, text="Привет!") lbl.grid(column=0, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Вот результат:

    Без вызова функции grid для label метка не появится.

    Установка размера шрифта метки

    Вы можете настроить шрифт метки, чтобы сделать его более крупным или, возможно, жирным. Кроме того, можно изменить стиль шрифта.

    Для этого передайте дополнительный параметр font:

    lbl = Label(window, text="Привет!", font=("Arial Bold", 50))

    Code language: JavaScript (javascript)

    Следует отметить, что параметр font может быть передан любому виджету для изменения его шрифта, а не только меткам.

    Все замечательно. Но окно настолько маленькое, что мы даже не видим заголовок. Как установить размер окна?

    Установка размера окна

    Мы можем установить размер окна по умолчанию, используя функцию geometry:

    window.geometry('350x200')

    Code language: JavaScript (javascript)

    Приведенная выше строка устанавливает ширину окна в 350 пикселей и высоту в 200 пикселей.

    Давайте попробуем добавить больше виджетов в виде кнопок и посмотрим, как обрабатывать событие нажатия на кнопку.

    Добавление виджета кнопки

    Давайте начнем с добавления кнопки на окно. Кнопка создается и добавляется так же, как и метка:

    btn = Button(window, text="Нажми меня") btn.grid(column=1, row=0)

    Code language: JavaScript (javascript)

    В результате код будет выглядеть следующим образом:

    from tkinter import * window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') lbl = Label(window, text="Привет!") lbl.grid(column=0, row=0) btn = Button(window, text="Нажми меня") btn.grid(column=1, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Результат будет выглядеть так:

    Обратите внимание, что мы размещаем кнопку во втором столбце окна, то есть в столбце 1. Если забыть об этом и поместить кнопку в тот же столбец (в данном случае 0), то будет отображаться только кнопка, так как кнопка будет находиться над меткой.

    Изменение цвета фона и шрифта кнопки.

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

    Также с помощью свойства bg можно изменить цвет фона любого виджета.

    btn = Button(window, text="Click Me", bg="orange", fg="red")

    Code language: JavaScript (javascript)

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

    Обработка события нажатия кнопки

    Сначала мы напишем функцию, которая должна выполняться при нажатии на кнопку:

    def clicked(): lbl.configure(text="Кнопка нажата!!")

    Code language: JavaScript (javascript)

    Затем мы свяжем её с кнопкой, указав функцию следующим образом:

    btn = Button(window, text="Нажми меня", command=clicked)

    Code language: JavaScript (javascript)

    Обратите внимание, что мы пишем просто clicked, а не clicked() со скобками.

    Теперь весь код будет выглядеть следующим образом:

    from tkinter import * def clicked(): lbl.configure(text="Кнопка нажата!!") window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') lbl = Label(window, text="Привет!") lbl.grid(column=0, row=0) btn = Button(window, text="Нажми меня", command=clicked) btn.grid(column=1, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Когда мы жмем на кнопку, то получаем нужный результат:

    Отлично!

    Ввод данных с помощью класса Entry (текстовое поле Tkinter)

    В предыдущих примерах графического интерфейса Python мы рассмотрели, как добавлять простые виджеты. Теперь давайте попробуем получить данные от пользователя, используя класс Tkinter Entry (текстовое поле Tkinter).

    Вы можете создать текстовое поле с помощью класса Tkinter Entry следующим образом:

    Далее вы можете добавить виджет в окно с помощью функции grid, как и раньше.

    Наш код будет выглядеть так::

    from tkinter import * def clicked(): lbl.configure(text="Кнопка нажата!!") window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') lbl = Label(window, text="Привет!") lbl.grid(column=0, row=0) txt = Entry(window,width=10) txt.grid(column=1, row=0) btn = Button(window, text="Нажми меня", command=clicked) btn.grid(column=2, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Результат будет следующим:

    Теперь, если вы нажмете на кнопку, будет выведено то же сообщение, что и выше. Как насчет показа текста, набранного в виджете ввода?

    Мы можем получить введенный текст с помощью функции get. Затем мы можем добавить его в нашу функцию clicked, например, так:

    def clicked(): res = "Добро пожаловать, " + txt.get() lbl.configure(text= res)

    Code language: JavaScript (javascript)

    Если вы нажмете на кнопку и в виджете ввода будет текст, он покажет “Добро пожаловать, “, соединенный с введенным текстом.

    Вот полный код:

    from tkinter import * def clicked(): res = "Добро пожаловать, " + txt.get() lbl.configure(text= res) window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') lbl = Label(window, text="Привет!") lbl.grid(column=0, row=0) txt = Entry(window,width=10) txt.grid(column=1, row=0) btn = Button(window, text="Нажми меня", command=clicked) btn.grid(column=2, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Запустите приведенный выше код и проверьте результат:

    Потрясающе!

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

    Установка фокуса на виджете ввода

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

    txt.focus()

    Code language: CSS (css)

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

    Отключение виджета ввода

    Чтобы отключить виджет ввода, можно установить свойство state в значение disabled:

    txt = Entry(window,width=10, state='disabled')

    Code language: JavaScript (javascript)

    Теперь вы больше не можете вводить никакой текст.

    Добавление виджета combobox

    Чтобы добавить виджет combobox, можно использовать класс Combobox из библиотеки ttk, как показано ниже:

    from tkinter.ttk import * combo = Combobox(window)

    Code language: JavaScript (javascript)

    Затем вы можете добавить значения в список.

    from tkinter import * from tkinter.ttk import * window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') combo = Combobox(window) combo['values']= (1, 2, 3, 4, 5, "Какой-то текст") combo.current(1) #Элемент выбранный по умолчанию combo.grid(column=0, row=0) window.mainloop()

    Code language: PHP (php)

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

    Чтобы установить выбранный элемент, можно передать индекс нужного элемента функцию current.

    Чтобы получить выбранный элемент, можно использовать функцию get, как показано ниже:

    combo.get()

    Code language: CSS (css)

    Добавление виджета Checkbutton (Tkinter checkbox)

    Чтобы создать виджет Checkbutton, вы можете использовать класс Checkbutton:

    chk = Checkbutton(window, text='Выбери меня')

    Code language: JavaScript (javascript)

    Кроме того, вы можете установить состояние “checked”, передав значение активации кнопке Checkbutton, как показано ниже:

    from tkinter import * from tkinter.ttk import * window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') chk_state = BooleanVar() chk_state.set(True) #Устанавливаем состояние по умолчанию checked chk = Checkbutton(window, text='Выбери меня', var=chk_state) chk.grid(column=0, row=0) window.mainloop()

    Code language: PHP (php)

    Проверка результата:

    Установка состояния Checkbutton

    Здесь мы создаем переменную типа BooleanVar, которая не является стандартной переменной Python, это переменная Tkinter. Затем мы передаем его в класс Checkbutton для установки состояния галочки, как показано выше. Вы можете установить булево значение false, чтобы отключить отметку.

    Также вы можете использовать IntVar вместо BooleanVar и установить значение 0 или 1.

    chk_state = IntVar() chk_state.set(0) #Галочки нет chk_state.set(1) #Галочка есть

    Code language: PHP (php)

    Добавление виджета radio button

    Чтобы их добавить, вы можете использовать класс RadioButton, как показано ниже:

    rad1 = Radiobutton(window,text='Первый пункт', value=1)

    Code language: JavaScript (javascript)

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

    from tkinter import * from tkinter.ttk import * window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') rad1 = Radiobutton(window,text='Первый пункт', value=1) rad2 = Radiobutton(window,text='Второй пункт', value=2) rad3 = Radiobutton(window,text='Третий пункт', value=3) rad1.grid(column=0, row=0) rad2.grid(column=1, row=0) rad3.grid(column=2, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Результат выполнения приведенного выше кода выглядит следующим образом:

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

    Вот пример:

    rad1 = Radiobutton(window,text='Первый пункт', value=1, command=clicked) def clicked(): # Код функции

    Code language: PHP (php)

    Все очень просто!

    Получить значение радиокнопки (выбранный вариант)

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

    from tkinter import * from tkinter.ttk import * window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') selected = IntVar() rad1 = Radiobutton(window,text='Первый пункт', value=1, variable=selected) rad2 = Radiobutton(window,text='Второй пункт', value=2, variable=selected) rad3 = Radiobutton(window,text='Третий пункт', value=3, variable=selected) def clicked(): print(selected.get()) btn = Button(window, text="Нажми меня!", command=clicked) rad1.grid(column=0, row=0) rad2.grid(column=1, row=0) rad3.grid(column=2, row=0) btn.grid(column=3, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Добавление виджета ScrolledText (Tkinter textarea)

    Чтобы добавить виджет ScrolledText, вы можете использовать класс ScrolledText, как показано ниже:

    from tkinter import scrolledtext txt = scrolledtext.ScrolledText(window,width=40,height=10)

    Code language: JavaScript (javascript)

    Мы указываем ширину и высоту виджета, иначе он заполнит все окно.

    from tkinter import * from tkinter.ttk import * from tkinter import scrolledtext window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') txt = scrolledtext.ScrolledText(window,width=40,height=10) txt.grid(column=0,row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Результат:

    Установка содержимого scrolledtext.

    Чтобы задать содержимое у scrolledtext, можно использовать метод insert, как показано ниже:

    txt.insert(INSERT,'Какой-то текст')

    Code language: JavaScript (javascript)

    Удаление/очистка содержимого scrolledtext

    Чтобы удалить содержимое виджета с прокруткой текста, можно использовать метод delete, как показано ниже:

    txt.delete(1.0,END)

    Code language: CSS (css)

    Отлично!

    Создание MessageBox

    Чтобы отобразить окно сообщения с помощью Tkinter, вы можете использовать библиотеку messagebox, как показано ниже:

    from tkinter import messagebox messagebox.showinfo('Заголовок всплывающего окна','Содержимое всплывающего окна')

    Code language: JavaScript (javascript)

    Достаточно просто!

    Покажем сообщение, когда пользователь нажмет на кнопку.

    from tkinter import * from tkinter import messagebox window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') def clicked(): messagebox.showinfo('Заголовок всплывающего окна','Содержимое всплывающего окна') btn = Button(window,text='Нажми меня!', command=clicked) btn.grid(column=0,row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Когда вы нажмете на кнопку, появится информационное окно с сообщением.

    Отображение сообщений об ошибках и предупреждений

    Таким же можно отобразить предупреждающее сообщение или сообщение об ошибке. Единственное, что необходимо изменить messagebox.showinfo на messagebox.showwarning или messagebox.showerror.

    messagebox.showwarning('Заголовок окна', 'Содержимое окна') #Окно с иконкой предупрждения messagebox.showerror('Заголовок окна', 'Содержимое окна') #Окно с иконкой ошибки

    Code language: PHP (php)

    Отображение диалоговых окон с вопросами и ответами

    Чтобы отобразить пользователю окно сообщения “да/нет”, можно использовать одну из следующих функций messagebox:

    res = messagebox.askquestion('Заголовок окна','Содержимое окна') res = messagebox.askyesno('Заголовок окна','Содержимое окна') res = messagebox.askyesnocancel('Заголовок окна','Содержимое окна') res = messagebox.askokcancel('Заголовок окна','Содержимое окна') res = messagebox.askretrycancel('Заголовок окна','Содержимое окна')

    Code language: JavaScript (javascript)

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

    Вы также можете проверить, какую кнопку нажал пользователь, используя переменную result.

    Если вы нажмете OK, или “да”, или “повторить попытку”, то вернется True, а если вы выберете “нет” или “отмена”, то вернется False.

    Единственной функцией, которая возвращает одно из трех значений, является функция askyesnocancel , которая возвращает True, False или None .

    Добавление SpinBox (виджет чисел)

    Чтобы создать данный виджет, вы можете использовать класс Spinbox, как показано ниже:

    spin = Spinbox(window, from_=0, to=100)

    Code language: JavaScript (javascript)

    Здесь мы создаем виджет Spinbox и передаем параметры from_ и to, чтобы указать диапазон чисел для Spinbox.

    Кроме того, вы можете указать ширину виджета с помощью параметра width:

    spin = Spinbox(window, from_=0, to=100, width=5)

    Code language: JavaScript (javascript)

    Давайте посмотрим весь пример:

    from tkinter import * from tkinter import messagebox window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') spin = Spinbox(window, from_=0, to=100, width=5) spin.grid(column=0,row=0) window.mainloop()

    Code language: JavaScript (javascript)

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

    spin = Spinbox(window, values=(3, 8, 11), width=5)

    Code language: JavaScript (javascript)

    В результате виджет Spinbox покажет только 3 числа: 3, 8 и 11.

    Установка значения по умолчанию для Spinbox

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

    var =IntVar() var.set(36) spin = Spinbox(window, from_=0, to=100, width=5, textvariable=var)

    Code language: JavaScript (javascript)

    Теперь, если вы запустите программу, Spinbox отобразит значение по умолчанию 36.

    Добавление виджета Progressbar

    Чтобы создать прогресс-бар, вы можете использовать класс progressbar, как показано ниже:

    from tkinter.ttk import Progressbar bar = Progressbar(window, length=200)

    Code language: JavaScript (javascript)

    Значение шкалы можно задать следующим образом:

    bar['value'] = 70

    Code language: JavaScript (javascript)

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

    Изменение цвета Progressbar

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

    Сперва мы создадим стиль, затем в этом стиле установим цвет фона, и, наконец, присвоим стиль Progressbar’у.

    Посмотрите следующий пример:

    from tkinter import * from tkinter.ttk import Progressbar from tkinter import ttk window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') style = ttk.Style() style.theme_use('default') style.configure("black.Horizontal.TProgressbar", background='black') bar = Progressbar(window, length=200, style='black.Horizontal.TProgressbar') bar['value'] = 70 bar.grid(column=0, row=0) window.mainloop()

    Code language: JavaScript (javascript)

    Результат будет выглядеть так:

    Окно добавления файла (выбор файла и каталога).

    Для создания такого окна вы можете использовать класс filedialog, как показано ниже:

    from tkinter import filedialog file = filedialog.askopenfilename()

    Code language: JavaScript (javascript)

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

    Вы также можете выбрать несколько файлов:

    files = filedialog.askopenfilenames()

    Указание типов файлов (фильтр по расширению)

    Вы можете указать типы файлов с помощью параметра filetypes, который задает расширение в кортежах.

    file = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all files","*.*")))

    Code language: JavaScript (javascript)

    Директорию можно получить с помощью метода askdirectory:

    dir = filedialog.askdirectory()

    Вы можете указать начальный каталог, указав initialdir:

    from os import path file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

    Code language: JavaScript (javascript)

    Добавление меню

    Чтобы добавить меню, вы можете использовать класс menu:

    from tkinter import Menu menu = Menu(window) menu.add_command(label='Файл') window.config(menu=menu)

    Code language: JavaScript (javascript)

    Сначала мы создадим меню. Затем мы добавляем нашу первую метку. После этого мы назначаем меню окну.

    Вы можете добавить пункты в любое меню с помощью функции add_cascade(), например, так:

    menu.add_cascade(label='Файл', menu=new_item)

    Code language: JavaScript (javascript)

    Наш код будет выглядеть так:

    from tkinter import * from tkinter import Menu window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') menu = Menu(window) new_item = Menu(menu) new_item.add_command(label='Новый') menu.add_cascade(label='Файл', menu=new_item) window.config(menu=menu) window.mainloop()

    Code language: JavaScript (javascript)

    Вы можете добавить столько пунктов, сколько захотите.

    from tkinter import * from tkinter import Menu window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') menu = Menu(window) new_item = Menu(menu) new_item.add_command(label='Новый') new_item.add_separator() new_item.add_command(label='Редактировать') menu.add_cascade(label='Файл', menu=new_item) window.config(menu=menu) window.mainloop()

    Code language: JavaScript (javascript)

    Здесь мы добавим еще один пункт меню под названием “Редактировать” с разделителем.

    Вы можете отключить пунктирную линию в верхней части выпадающего списка:

    new_item = Menu(menu, tearoff=0)

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

    new_item.add_command(label='Новый', command=clicked)

    Code language: JavaScript (javascript)

    Добавление виджета Notebook (элемент управления вкладками)

    Чтобы создать блок управления вкладками, необходимо выполнить три шага.

    • Сначала создадим блок управления вкладками с помощью класса Notebook
    • Создадим вкладку с помощью класса Frame.
    • Добавим вкладку в блок управления вкладками.
    • Расположим блок управления вкладками так, чтобы он отображался в окне.

    from tkinter import * from tkinter import ttk window = Tk() window.title("Добро пожаловать!") window.geometry('350x200') tab_control = ttk.Notebook(window) tab1 = ttk.Frame(tab_control) tab_control.add(tab1, text='Первая вкладка') tab_control.pack(expand=1, fill='both') window.mainloop()

    Code language: JavaScript (javascript)

    Вы можете добавить столько вкладок, сколько захотите.

    Добавление виджетов на вкладки

    После создания вкладок вы можете разместить виджеты внутри них, назначив родительское свойство нужной вкладке.

    Добавление отступов у виджетов (spacing или padding)

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

    Просто передайте padx и pady любому виджету и присвойте им значение.

    lbl1 = Label(tab1, text= 'Метка', padx=5, pady=5)

    Code language: JavaScript (javascript)

    Все просто!

    В этом руководстве мы рассмотрели множество примеров графических интерфейсов Python, использующих библиотеку Tkinter, и увидели, насколько просто разрабатывать GUI с ее помощью.

    Надеюсь, эти примеры будут вам полезны.

    Improve Article

    Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Python offers multiple options for developing a GUI (Graphical User Interface). Out of all the GUI methods, Tkinter is the most commonly used method. Python with Tkinter is the fastest and easiest way to create GUI applications. Creating a GUI using Tkinter is an easy task.
    In Python3 Tkinter is come preinstalled But you can also install it by using the command: 
     

    pip install tkinter

    Example: Now let’s create a simple window using Tkinter
     

    Python3

    import tkinter as tk

    root = tk.Tk()

    root.title("First Tkinter Window")

    root.mainloop()

    Output :
     

    python-tkinter1

    The Entry Widget

    The Entry Widget is a Tkinter Widget used to Enter or display a single line of text. 
     

    Syntax : 

    entry = tk.Entry(parent, options)

    Parameters: 
     

    1) Parent: The Parent window or frame in which the widget to display.
    2) Options: The various options provided by the entry widget are: 
     

    • bg : The normal background color displayed behind the label and indicator. 
    • bd : The size of the border around the indicator. Default is 2 pixels. 
    • font : The font used for the text. 
    • fg : The color used to render the text. 
    • justify : If the text contains multiple lines, this option controls how the text is justified: CENTER, LEFT, or RIGHT. 
    • relief : With the default value, relief=FLAT. You may set this option to any of the other styles like : SUNKEN, RIGID, RAISED, GROOVE 
    • show : Normally, the characters that the user types appear in the entry. To make a .password. entry that echoes each character as an asterisk, set show=”*”. 
    • textvariable : In order to be able to retrieve the current text from your entry widget, you must set this option to an instance of the StringVar class.

    Methods: The various methods provided by the entry widget are: 

    • get() : Returns the entry’s current text as a string. 
    • delete() : Deletes characters from the widget 
    • insert ( index, ‘name’) : Inserts string ‘name’ before the character at the given index. 
       

    Example: 
     

    Python3

    import tkinter as tk

    root=tk.Tk()

    root.geometry("600x400")

    name_var=tk.StringVar()

    passw_var=tk.StringVar()

    def submit():

        name=name_var.get()

        password=passw_var.get()

        print("The name is : " + name)

        print("The password is : " + password)

        name_var.set("")

        passw_var.set("")

    name_label = tk.Label(root, text = 'Username', font=('calibre',10, 'bold'))

    name_entry = tk.Entry(root,textvariable = name_var, font=('calibre',10,'normal'))

    passw_label = tk.Label(root, text = 'Password', font = ('calibre',10,'bold'))

    passw_entry=tk.Entry(root, textvariable = passw_var, font = ('calibre',10,'normal'), show = '*')

    sub_btn=tk.Button(root,text = 'Submit', command = submit)

    name_label.grid(row=0,column=0)

    name_entry.grid(row=0,column=1)

    passw_label.grid(row=1,column=0)

    passw_entry.grid(row=1,column=1)

    sub_btn.grid(row=2,column=1)

    root.mainloop()

    Output : 
     

    python-tkinter-entry-widget

    python-tkinter-entry-widget

    Improve Article

    Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Python offers multiple options for developing a GUI (Graphical User Interface). Out of all the GUI methods, Tkinter is the most commonly used method. Python with Tkinter is the fastest and easiest way to create GUI applications. Creating a GUI using Tkinter is an easy task.
    In Python3 Tkinter is come preinstalled But you can also install it by using the command: 
     

    pip install tkinter

    Example: Now let’s create a simple window using Tkinter
     

    Python3

    import tkinter as tk

    root = tk.Tk()

    root.title("First Tkinter Window")

    root.mainloop()

    Output :
     

    python-tkinter1

    The Entry Widget

    The Entry Widget is a Tkinter Widget used to Enter or display a single line of text. 
     

    Syntax : 

    entry = tk.Entry(parent, options)

    Parameters: 
     

    1) Parent: The Parent window or frame in which the widget to display.
    2) Options: The various options provided by the entry widget are: 
     

    • bg : The normal background color displayed behind the label and indicator. 
    • bd : The size of the border around the indicator. Default is 2 pixels. 
    • font : The font used for the text. 
    • fg : The color used to render the text. 
    • justify : If the text contains multiple lines, this option controls how the text is justified: CENTER, LEFT, or RIGHT. 
    • relief : With the default value, relief=FLAT. You may set this option to any of the other styles like : SUNKEN, RIGID, RAISED, GROOVE 
    • show : Normally, the characters that the user types appear in the entry. To make a .password. entry that echoes each character as an asterisk, set show=”*”. 
    • textvariable : In order to be able to retrieve the current text from your entry widget, you must set this option to an instance of the StringVar class.

    Methods: The various methods provided by the entry widget are: 

    • get() : Returns the entry’s current text as a string. 
    • delete() : Deletes characters from the widget 
    • insert ( index, ‘name’) : Inserts string ‘name’ before the character at the given index. 
       

    Example: 
     

    Python3

    import tkinter as tk

    root=tk.Tk()

    root.geometry("600x400")

    name_var=tk.StringVar()

    passw_var=tk.StringVar()

    def submit():

        name=name_var.get()

        password=passw_var.get()

        print("The name is : " + name)

        print("The password is : " + password)

        name_var.set("")

        passw_var.set("")

    name_label = tk.Label(root, text = 'Username', font=('calibre',10, 'bold'))

    name_entry = tk.Entry(root,textvariable = name_var, font=('calibre',10,'normal'))

    passw_label = tk.Label(root, text = 'Password', font = ('calibre',10,'bold'))

    passw_entry=tk.Entry(root, textvariable = passw_var, font = ('calibre',10,'normal'), show = '*')

    sub_btn=tk.Button(root,text = 'Submit', command = submit)

    name_label.grid(row=0,column=0)

    name_entry.grid(row=0,column=1)

    passw_label.grid(row=1,column=0)

    passw_entry.grid(row=1,column=1)

    sub_btn.grid(row=2,column=1)

    root.mainloop()

    Output : 
     

    python-tkinter-entry-widget

    python-tkinter-entry-widget

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Как изменить цвет echo
  • Как изменить цвет dualshock 4 на андроид
  • Как изменить цвет combobox wpf
  • Как изменить цвет checkbox android studio
  • Как изменить цвет button android studio

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии