Разное

Tkinter gui python: Полный курс по изучению Tkinter + Примеры

Содержание

Полный курс по изучению Tkinter + Примеры

В Python есть довольно много GUI фреймворков (graphical user interface), однако только Tkinter встроен в стандартную библиотеку языка. У Tkinter есть несколько преимуществ. Он кроссплатформенный, поэтому один и тот же код можно использовать на Windows, macOS и Linux.

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

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

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

Другие статьи по Tkinter на сайте

  1. Создание окна по центру и кнопка выхода в Tkinter
  2. Разметка виджетов в Tkinter — pack, grid и place
  3. Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
  4. Меню, подменю и панель инструментов в Tkinter
  5. Диалоговые окна в Tkinter
  6. Рисуем линии, прямоугольники, круг и текст в Tkinter
  7. Пишем игру змейка на Tkinter

Основные аспекты руководства

  • Введение и создание простого приложения «Hello, World!» в Tkinter;
  • Работа с виджетами вроде кнопок или текстовых боксов;
  • Управление макетом приложений через геометрические менеджеры;
  • Создание интерактивного приложения через связывание кнопок с функциями Python.

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

Создание простого GUI приложения на Tkinter

Главным элементом GUI Tkinter является окно. Окнами называют контейнеры, в которых находятся все GUI элементы. Данные GUI элементы, к числу которых относятся текстовые боксы, ярлыки и кнопки, называются виджетами. Виджеты помещаются внутри окон.

Сперва создадим окно с одним виджетом. Запустим новую сессию оболочки Python, следуя инструкции.

На заметку: Примеры кода, используемые в руководстве, были протестированы на Windows, macOS и Ubuntu Linux 18.04 через версии Python 3.6, 3.7 и 3.8.

В случае, если вы установили Python на Windows или macOS, скачав установщик c официального сайта python.org, проблем с запуском кода из примеров возникнуть не должно. Можете пропустить оставшуюся часть заметки и перейти к самому руководству.

В случае, если ввиду отсутствия официальных дистрибутивов Python для вашей системы, вы установили Python иным образом, тогда обратите внимание на следующие моменты.

Установка Python на macOS используя Homebrew:

Дистрибутив Python для macOS, доступный на Homebrew, поставляется без библиотеки Tcl/Tk с Tkinter. Вместо этого используется версия системы по умолчанию. Версия может быть устаревшей и не позволяющей импортировать модуль Tkinter в Python. Во избежание такой проблемы, используйте официальный установщик macOS.

Ubuntu Linux 16.04:

Последняя версия Python доступна на Ubuntu Linux 16.04, это 3.5. Вы можете установить последнюю версию через deadsnakes PPA. Далее даны команды для установки PPA и загрузки последней версии Python с правильной версией Tcl/Tk:


$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.8 python3-tk



$ sudo add-apt-repository ppa:deadsnakes/ppa

$ sudo apt-get update

$ sudo apt-get install python3. 8 python3-tk


Первые две команды добавляют deadsnakes PPA в ваш системный список репозитория, а последняя команда устанавливает Python 3.8 и модуль GUI Tkinter.

Ubuntu Linux 18.04:

Вы можете установить последнюю версию Python с соответствующей версией Tcl/Tk из универсального репозитория через следующую команду:


$ sudo apt-get install python3.8 python3-tk



$ sudo apt-get install python3.8 python3-tk


Таким образом устанавливается Python 3.8, а также модуль Tkinter.

Прочие версии Linux:

Если на данный момент нет официального рабочего установщика Python для Linux дистрибутива, то можете поставить Python вместе с соответствующей версией Tcl/Tk через исходный код. С пошаговой инструкцией процесса можете ознакомиться на странице: Установка Python 3. 8 из исходного кода на Linux

В открытой оболочке IDLE Python первым делом необходимо импортировать модуль Tkinter:

Окно, или window является экземпляром класса Tkinter. Попробуйте создать новое окно, присвоив его переменной окна window:

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

Далее в руководстве будут представлены примеры из операционной системы Ubuntu и Windows.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!


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

Теперь, когда у вас есть окно, можно добавить на него виджет. Используем класс tk.Label и добавим какой либо текст на окно.

Создадим виджет ярлыка (label) с текстом "Привет, Tkinter!" и присвоим его переменной под названием greeting:

>>> greeting = tk.Label(text=»Привет, Tkinter!»)



>>> greeting = tk.Label(text=»Привет, Tkinter!»)

Созданное ранее окно не меняется. Создается виджет ярлыка, однако пока не добавляется на окно. Есть несколько способов добавления виджетов на окно. Сейчас можно использовать метод .pack() от виджета ярлыка:

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

При использовании метода . pack() для размещения виджета в окне, Tkinter устанавливает размер окна настолько маленьким, насколько возможно, пока в него не влезает виджет. Теперь выполним следующее:

Кажется, будто ничего не случилось, но это не совсем так. window.mainloop() указывает Python, что нужно запустить цикл событий Tkinter. Данный метод требуется для событий вроде нажатий на клавиши или кнопки, он также блокирует запуск любого кода, что следует после, пока окно, на котором оно было вызвано, не будет закрыто. Попробуйте закрыть созданное окно, и вы увидите появившуюся в оболочке подсказку.

Внимание: При работе с Tkinter из Python REPL окна обновляются при выполнении каждой строки. Однако, если программа Tkinter выполняется из запущенного файла, такого не происходит.

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

Для создания окна в Tkinter, нужно всего несколько строк кода. Тем не менее, в пустое окно нам ничем не поможет! В следующем разделе будут рассмотрены некоторые виджеты, доступные в Tkinter, а также способы их настройки при добавлении в приложение.

Задание #1 Создать обычное окно в Tkinter

Выполните небольшое задание, чтобы проверить свои знания.

Напишите полный скрипт для создания окна в Tkinter с текстом «Python рулит!». Окно должно выглядеть следующим образом:

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

Код с решением

import tkinter as tk

window = tk.Tk()
label = tk.Label(text=»Python рулит!»)
label.pack()

window.mainloop()



import tkinter as tk

 

window = tk. Tk()

label = tk.Label(text=»Python рулит!»)

label.pack()

 

window.mainloop()

Работа с виджетами в Tkinter

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

Класс виджетаОписание
LabelИспользуется для отображения текста или вставки изображения на окне приложения.
ButtonКнопка, на которой может быть текст, совершает определенные действия при нажатии на нее.
EntryВиджет для ввода одной строчки текста. Эквивалент <input type="text"> в HTML.
TextВиджет для ввода большого текста. Эквивалент <textarea> в HTML.
FrameПрямоугольная область, что используется для группировки виджетов или для добавления расстояния между виджетами.

В дальнейшем, мы на практике рассмотрим, как действует каждый из представленных выше виджетов. С более подробными списками виджетов Tkinter можете ознакомиться на страницах Basic Widgets и More Widgets. А пока рассмотрим подробнее виджет ярлыка Label.

Виджет Label — Отображение текста и картинок

Виджеты Label используется для отображения текста или картинок. Текст на виджете Label, не может редактироваться пользователем. Он только показывается. Как было показано в примере в начале данного руководства, виджет Label можно создать через экземпляр класса Label и передачу строки в параметр text:

label = tk.Label(text=»Hello, Tkinter»)



label = tk.Label(text=»Hello, Tkinter»)

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

Изменить цвет текста и фона виджета Label можно через параметры foreground и background:

label = tk.Label(
text=»Привет, Tkinter!»,
foreground=»white», # Устанавливает белый текст
background=»black» # Устанавливает черный фон
)



label = tk.Label(

    text=»Привет, Tkinter!»,

    foreground=»white»,  # Устанавливает белый текст

    background=»black»  # Устанавливает черный фон

)

Некоторые доступные цвета:

  • red — красный;
  • orange — оранжевый;
  • yellow — желтый;
  • green — зеленый;
  • blue — синий;
  • purple — сиреневый.

Многие HTML-цвета имеют такое же название в Tkinter. Со списком доступных названий цветов можете ознакомиться здесь.

Если хотите подробнее разобраться в теме, особенно в системных цветах macOS и Windows, контролируемых текущей темой ОС, ознакомьтесь со страницей значений цветов.

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

label = tk.Label(text=»Привет, Tkinter!», background=»#34A2FE»)



label = tk.Label(text=»Привет, Tkinter!», background=»#34A2FE»)

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

Если вам не хочется регулярно вводить foreground и background, можете использовать сокращенные версии параметров — fg и bg. Они точно также отвечают за установку цвета текста и цвета фона.

label = tk.Label(text=»Привет, Tkinter!», fg=»white», bg=»black»)



label = tk.Label(text=»Привет, Tkinter!», fg=»white», bg=»black»)

Вы также можете управлять шириной и высотой ярлыка с помощью параметров width и height:

import tkinter as tk

window = tk.Tk()

label = tk.Label(
text=»Привет, Tkinter!»,
fg=»white»,
bg=»black»,
width=20,
height=20
)

label.pack()
window.mainloop()



import tkinter as tk

 

window = tk.Tk()

 

label = tk.Label(

    text=»Привет, Tkinter!»,

    fg=»white»,

    bg=»black»,

    width=20,

    height=20

)

 

label. pack()

window.mainloop()

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

Может показаться странным, что ярлык в окне не является квадратным, хотя параметр как ширины, так и высоты равен 20. Все оттого, что ширина и высота измеряются в текстовых юнитах.

Горизонтальный текстовый юнит определен шириной символа "0", или цифрой ноль, в шрифте системы по умолчанию. Аналогичным образом один вертикальный текстовый юнит определен высотой символа "0".

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

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

Ярлыки отлично подходят для отображения текста, но через них пользователь не может вводить данные. Следующие три виджета позволяют пользователю вводить информацию.

Создание кнопки через виджет Button

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

Существует много сходств между виджетами Button и Label. По сути кнопка — это просто ярлык, на который можно кликнуть. Для создания стилей виджетов ярлыка и кнопки также используются одинаковые аргументы.

К примеру, следующий код создает кнопку с синим фоном и желтым текстом. Также устанавливается ширина и высота с показателями в 25 и 5 текстовых юнит:

import tkinter as tk

window = tk. Tk()

button = tk.Button(
text=»Нажми на меня!»,
width=25,
height=5,
bg=»blue»,
fg=»yellow»,
)

button.pack()
window.mainloop()



import tkinter as tk

 

window = tk.Tk()

 

button = tk.Button(

    text=»Нажми на меня!»,

    width=25,

    height=5,

    bg=»blue»,

    fg=»yellow»,

)

 

button.pack()

window.mainloop()

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

Неплохо! Следующие два виджета Entry и Text используются для сбора вводных данных от пользователя.

Виджет Entry — Однострочное текстовое поле

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

Создание виджета Entry практически ничем не отличается от процесса создания ярлыка и кнопки. К примеру, следующий код создает виджет с синим фоном и желтым текстом длиной в 50 текстовых юнит:

entry = tk.Entry(fg=»yellow», bg=»blue», width=50)



entry = tk.Entry(fg=»yellow», bg=»blue», width=50)

В случае виджета однострочного текстового поля (Entry) интересен не процесс создания стиля, а то, как получить эти входные данные от пользователя. Есть три основные операции, что можно провести с виджетом однострочного текстового поля (Entry):

  • Получение всего текста через .get()
  • Удаление текста через .delete()
  • Вставка нового текста через .insert()

Для лучшего понимания принципа работы виджетов Entry создадим один экземпляр элемента и попробуем ввести в него текст. Откройте оболочку Python и выполните следующие действия. Сначала импортируем tkinter и создаем новое окно:

>>> import tkinter as tk
>>> window = tk.Tk()



>>> import tkinter as tk

>>> window = tk.Tk()

Теперь создаем виджеты Label и Entry:

>>> label = tk.Label(text=»Имя»)
>>> entry = tk.Entry()



>>> label = tk.Label(text=»Имя»)

>>> entry = tk.Entry()

Здесь ярлык указывает, что именно пользователь должен записать в виджете Entry. Нет никаких ограничений для вводимых данных, это просто подсказка, что ввести нужно «Имя». Виджеты станут видимыми на окне после выполнения метода . pack() для каждого из них:

>>> label.pack()
>>> entry.pack()



>>> label.pack()

>>> entry.pack()

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

Обратите внимание, что в окне, виджет ярлыка автоматически центрирует над виджетом текстового поля. Это особенность разметки pack, о которой будет описано в следующих разделах.

На созданном в программе виджете мы ввели текст «Иван Иванов»:

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

>>> name = entry.get()
>>> name
‘Иван Иванов’



>>> name = entry. get()

>>> name

‘Иван Иванов’

Текст также можно удалить, для этого используется метод .delete(). Данный метод принимает аргумент, который является целым числом и сообщает Python, какой символ нужно удалить. К примеру, во фрагменте кода ниже показано, как через метод .delete(0) можно удалить первый символ из текстового поля:

Теперь в виджете остался текст "ван Иванов":

Обратите внимание, что как и строки в Python, текст в виджете однострочного текстового поля индексируется,  и начинается индексирование с 0.

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

Теперь остался только текст "Иванов":

Метод . delete() работает по аналогии с методом строк slice() для удаления части символов из строки. Первый аргумент определяет начальный индекс удаления, последний индекс указывает где именно процесс удаления должен остановиться.

Для удаления всего текста из текстового поля во втором аргументе метода .delete() используется специальная константа tk.END:

>>> entry.delete(0, tk.END)



>>> entry.delete(0, tk.END)

Теперь остался пустой текстовый бокс:

 

Вы также можете вставить текст в виджете однострочного текстового поля с помощью метода .insert():

>>> entry.insert(0, «Иванов»)



>>> entry.insert(0, «Иванов»)

Теперь окно стало таким:

 

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

К примеру, при вызове .insert() с первым аргументом 100, а не 0, как было сделано выше, вывод будет тем же.

В том случае, если текстовое поле уже содержит какой-то текст, тогда .insert() вставить новый текст в указанную позицию и сдвинет существующий текст вправо:

>>> entry.insert(0, «Иван «)



>>> entry.insert(0, «Иван «)

В виджете с текстом теперь значится "Иван Иванов":

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

Виджет Text — ввод большого текста в Tkinter

Виджеты Text используются для ввода текста, как и виджеты Entry. Разница в том, что Text может содержать несколько строчек текста. С виджетом Text пользователь может вводить целые параграфы или страницы текста. Как и в случае с виджетами Entry, над виджетами Text можно провести три основные операции:

  • Получение текста через метод .get()
  • Удаление текста через метод .delete()
  • Вставка текста через метод .insert()

Несмотря на то, что названия методов совпадают с теми, что используются в Entry, процесс реализации несколько различен. Разберем пример создания виджета Text и посмотрим на деле, что он может делать.

На заметку: У вас все еще открыто предыдущее окно? Если это так, тогда закройте его, выполнив следующую команду:




Это также можно сделать вручную, просто нажав на кнопку «Закрыть».

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

>>> import tkinter as tk
>>> window = tk.Tk()
>>> text_box = tk.Text()
>>> text_box.pack()



>>> import tkinter as tk

>>> window = tk.Tk()

>>> text_box = tk.Text()

>>> text_box.pack()

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

Для активации текстового бокса нажмите на любую точку внутри окна. Введите слово "Hello". Нажмите на клавиатуре кнопку Enter, после чего введите на второй строке слово "World". Окно будет выглядеть следующим образом:

Как и в случае с виджетами Entry, вы можете получить текст их виджета Text с помощью метода . get(). Однако, вызов .get() без аргументов не возвращает весь текст как это происходит с виджетами однострочного ввода текста Entry. Появится исключение TypeError:

>>> text_box.get()
Traceback (most recent call last):
File «<pyshell#4>», line 1, in <module>
text_box.get()
TypeError: get() missing 1 required positional argument: ‘index1’



>>> text_box.get()

Traceback (most recent call last):

  File «<pyshell#4>», line 1, in <module>

    text_box.get()

TypeError: get() missing 1 required positional argument: ‘index1’

Метод .get() для текстового виджета запрашивает хотя бы один аргумент. Вызов .get() с единственным индексом возвращает один символ. Для получения нескольких символов требуется передать начальный и конечный индексы.

Индексы в виджетах Text действуют иначе, чем в виджетах Entry. Так как виджеты Text могут получить несколько строк текста, индекс должен содержать следующие два пункта:

  • Номер строки где находится символа;
  • Позиция символа в строке.

Номера строк начинаются с 1, а позиция символа с 0. Для получения индекса создается строка формата "<line>.<char>", где <line> заменяется номером строки, а <char> номером символа. К примеру, "1.0" означает первый символ на первой строке, а "2.3" представляет четвертый символ на второй строке.

Используем индекс "1.0" для получения первой буквы созданного ранее текстового бокса:

>>> text_box.get(«1.0»)
‘H’



>>> text_box. get(«1.0»)

‘H’

В слове "Hello" 5 букв, буква o стоит под индексом 4, так как отсчет символов начинается с 0, и слово "Hello" начинается с первой строки в текстовом боксе.

Как при слайсинге строк в Python, для получения целого слова "Hello" из текстового бокса, конечный индекс должен быть на один больше последнего читаемого символа.

Таким образом, для получения слова "Hello" из текстового бокса используется "1.0" для первого индекса, и "1.5" для второго индекса:

>>> text_box.get(«1.0», «1.5»)
‘Hello’



>>> text_box.get(«1.0», «1.5»)

‘Hello’

Для получения "World" на второй строке текстового бокса, измените номера строк каждого индекса на 2:

>>> text_box. get(«2.0», «2.5»)
‘World’



>>> text_box.get(«2.0», «2.5»)

‘World’

Для получения всего текста из текстового виджета установите индекс на "1.0" и используйте специальную константу tk.END для второго индекса:

>>> text_box.get(«1.0», tk.END)
‘Hello\nWorld\n’



>>> text_box.get(«1.0», tk.END)

‘Hello\nWorld\n’

Обратите внимание, что текст, возвращаемый через метод .get(), включает символы перехода на новую строку \n. Вы также можете увидеть в данном примере, что каждая строка в виджете Text содержит в конце символ новой строки, включая последнюю строку текста в текстовом боксе.

Метод . delete() используется для удаления символов из текстового виджета. Работает точно так же, как и метод .delete() для виджетов Entry. Есть два способа использования .delete():

  • С одним аргументом;
  • С двумя аргументами.

Используя вариант с одним аргументом, вы передаете индекс символа для удаления в .delete(). К примеру, следующий код удаляет первый символ H из текстового бокса:

>>> text_box.delete(«1.0»)



>>> text_box.delete(«1.0»)

Теперь в первой строке текста значится "ello":

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

К примеру, для удаления оставшейся части "ello" из первой строки текстового бокса используются индексы "1. 0" и "1.4":

>>> text_box.delete(«1.0», «1.4»)



>>> text_box.delete(«1.0», «1.4»)

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

Хотя вам этого не видно, но на первой строке остался один символ — это символ новой строки \n. Вы можете сами убедиться в этом, вызвав метод .get():

>>> text_box.get(«1.0»)
‘\n’



>>> text_box.get(«1.0»)

‘\n’

При удалении данного символа оставшаяся часть содержимого текстового виджета сдвинется на строку вверх:

>>> text_box. delete(«1.0»)



>>> text_box.delete(«1.0»)

Теперь слово "World" переместилось на первую строку текстового виджета:

Попробуем очистить оставшуюся часть из текстового виджета. Установим "1.0" в качестве стартового индекса и tk.END в качестве второго индекса:

>>> text_box.delete(«1.0», tk.END)



>>> text_box.delete(«1.0», tk.END)

Теперь наш текстовый виджет совершенно пуст:

Вы также можете вставить текст в текстовый виджет с помощью метода  .insert():

>>> text_box.insert(«1.0», «Hello»)



>>> text_box. insert(«1.0», «Hello»)

Метод вставляет слово "Hello" в начало текстового виджета. Используется уже знакомый формат "<line>.<column>" как и у метода .get() для уточнения позиции вставки текста:

Проверьте, что произойдет при попытке вставить слово "World" во вторую строчку:

>>> text_box.insert(«2.0», «World»)



>>> text_box.insert(«2.0», «World»)

Вместо вставки слова на вторую строку текст ставится в конце первой строки:

Если вы хотите поставить текст на новую строку, тогда понадобится вставить символ новой строки \n вручную:

>>> text_box.insert(«2.0», «\nWorld»)



>>> text_box. insert(«2.0», «\nWorld»)

Теперь слово "World" находится на второй строке текстового виджета:

Метод .insert() делает следующие две вещи:

  • Вставляет текст в указанной позиции, если в этой позиции или после неё уже находится текст;
  • Добавляет текст в указанную строку, если номер символа превышает индекс последнего символа в текстовом боксе.

Обычно нецелесообразно пытаться отследить индекс последнего символа. Лучший способ вставить текст в конец виджета Text — передать tk.END как первый параметр в методе .insert():

text_box.insert(tk.END, «Вставь меня в самом конце!»)



text_box.insert(tk.END, «Вставь меня в самом конце!»)

Не забудьте включить символ новой строки (\n) в начале текста, если вы хотите расположить его на новой строке:

text_box. insert(tk.END, «\nВставь меня в новую строку!»)

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

Курс «Tkinter. Программирование GUI на Python» знакомит с особенностями создания графического интерфейса пользователя средствами пакета tkinter языка программирования Python. Требует знания языка Python на уровне структурного программирования, желательно также владение азами ООП.

В курсе уделяется внимание работе с базовыми элементами интерфейса (виджетами), которые обычны при разработке средствами других языков программирования. Изучаются основные свойства и методы кнопок, меток, текстовых полей, списков, флажков и радиокнопок, холста и меню.

Рассматриваются различные варианты размещения виджетов в родительском окне: простой упаковкой относительно друг друга, посредством таблицы и с помощью указания координат. Данные способы компоновки присутствуют во многих других инструментах программирования GUI.

Изучаются настройки главного окна приложения и диалоговые окна.

Версия курса: октябрь 2020 г.

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

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

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

Метод pack
В tkinter с помощью метода pack виджеты располагаются в родительском окне или фрейме. В уроке описываются опции pack, позволяющие конфигурировать виджеты относительно друг друга и относительно родителя.

Text – многострочное текстовое поле
В tkinter от класса Text создаются виджеты многострочного текстового поля. В уроке рассматриваются свойства и методы Text, настройка Scrollbar (скроллера), создание и конфигурирование тегов.

Radiobutton и Checkbutton. Переменные Tkinter
В tkinter от классов Radiobutton и Checkbutton создаются радиокнопки и флажки. В уроке описываются их основные свойства и методы, а также переменные tkinter, позволяющие связывать радиокнопки в группы и снимать данные с флажков.

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

Метод bind
В Tkinter метод bind связывает виджет, событие и функцию-обработчик: widget.bind(event, function). В уроке рассматриваются особенности передачи функций в метод bind.

События
В GUI событиями являются клики и движение мышью, нажатие клавиш на клавиатуре, изменение виджетов. События — это особые объекты Tkinter, имеющие свои атрибуты: тип, виджет, по отношению к которому произошло событие и др.

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

Canvas. Идентификаторы, теги и анимация
Canvas — это холст, на котором можно программно выводить геометрические фигуры и другие объекты, к которым можно обращаться с помощью идентификаторов и тегов с целью изменения их свойств в процессе выполнения программы. Это позволяет в том числе делать холст интерактивным, создавать анимацию.

Окна
Окна в tkinter создаются от классов Tk и Toplevel, который используется в случае программирования многооконных приложений. Метод geometry позволяет задавать размер окна и его положение на экране. С помощью метода resizable можно запретить изменение размеров окна пользователем. title задает название окна в заголовке.

Метод grid
Grid — сетка, таблица — один из трех управляющих размещением, или менеджеров геометрии, Tkinter. Реализуется через метод grid виджетов. Опции: row, column, rowspan, columnspan, padx, pady, ipadx, ipady, sticky. Grid более удобен при разработке сложных GUI, чем Pack.

Диалоговые окна
В модулях messagebox и filedialog пакета tkinter содержатся функции вызова стандартных диалоговых окон — askyesno, askyesnocancel, showerror, showinfo, askopenfilename, asksaveasfilename и др.

Виджет Menu
В tkinter меню создаются от класса Menu. Для привязки списков используется метод add_cascade, для создания команд — add_command. Для создания всплывающего меню используется метод post.

Метод place
В tkinter метод place размещает виджеты по координатам. Возможно указание как абсолютных координат (x и y), так относительных (relx и rely). Размеры виджетов также могут быть абсолютными (width, height) и относительными (relwidth, relheight).

tkinter · Python step by step

  • Python step by step
  • Introduction

  • Последовательности и коллекции

    • Последовательности

    • Последовательности. Задачи

    • Значения и индексы

    • Значения и индексы. Задачи

    • Списки list

    • Функциональное программирование

    • Множества set

    • Кортежи tuple

    • Словари dict

    • Сортировка

    • Файлы

  • Объектно-ориентированное программирование

    • Объекты и классы

    • Композиция

    • Перегрузка операторов

    • Контрольная работа

    • Переменные класса и статические методы

    • Статические методы. Задачи

    • Наследование

    • Контрольная работа

    • Задачи — черновики

  • Прикладные пакеты

    • GUI — tkinter

Графический пользовательский интерфейс в питон

Пользовательский графический интерфейс с Tkinter в Python Питон.  

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

GUI расшифровывается как Graphical User Interface. На русском это означает пользовательский графический интерфейс. GUI используется во всех современных программах, он позволяет значительно облегчить работу с этими программами.

Для создания GUI в Python используется модуль tkinter. Импортируем этот модуль в нашу программу.
import tkinter as tk

Для создания GUI в Питоне нужно создать окно для него. Чтобы создать окно win, используйте команду tk.Tk()
win = tk.Tk()

В конце любой программы на tkinter в Питон нужно писать команду win.mainloop(), win это название окна для интерфейса. Команда mainloop() не позволяет окну закрываться сразу же при исполнении программы. Если не поместить эту команду в конец программы на Python, то окно для интерфейса закроется сразу же после запуска программы.
win.mainloop()

Изменим название окна для интерфейса Питон с помощью команды win.title(“”). В кавычках пишется текст, который будет отображаться в названии окна.
win.title(«itrobo.ru»)

Зададим окно размером 350×200 пикселей. Для этого в Python используется команда win.geometry(AxB), где A это ширина окна, B это высота окна. A и B пишутся в кавычках и разделяются символом “x”.
win.geometry(«350×200»)

Элементы в tkinter в Питоне создаются с помощью команды
элемент = tk.название_элемента(параметры_элемента)

Элемент метка label в Python

 Метка в Python создаётся с помощью команды
txt = tk.Label(win, text = «Комментарий»)

txt это название элемента-метки, Label это название метки, win это окно, в котором отображается метка, text это параметр, отвечающий за текст в метке, “Комментарий” это текст который будет отображаться в метке. Все параметры приведены в этом уроке. (ссылка на урок с метками, все 3 урока надо выложить вместе)

Элементы в tkinter в Питоне располагаются по сетке. Чтобы поставить элемент в определённое место сетки, используйте команду txt.grid(row = m, column = n), где txt это название элемента, который нужно расположить, row и column это параметры, отвечающие за строку и столбец с элементом, m и n это номера строки и столбца.
txt.grid(row = 2, column = 1)

Пример программы на Python графический интерфейс метка

import tkinter as tk

win = tk.Tk()

win.title(«itrobo.ru»)

win.geometry(«300×300»)

res = tk.Label(win, text = «Привет»)

res.grid(row = 3, column = 0)

win.mainloop()

Для изменения надписи на метке используется команда имя метки.configure(text=»новый текст метки»)

Например 
res.configure(text=»мою надпись поменяли»)

Элемент Button  кнопка в Python

Чтобы задать кнопку в графическом интерфейсе python  необходимо использовать команду
название объекта кнопка = tk.Button(win, text = “надпись на кнопке”, сomand = имя функции при нажатии)

Например 
button=tk.Button(win, text = “нажми меня”, comand =onclick)

создаст нкнопку с именем button  надпись на кнопке Нажми меня, при нажатии будет вызываться процедура onclik

для вывода кнопки на экран мы используем разметку и команду
имя кнопки.grid(row = номер строки, column = номер столбца)

например 
button.grid(row = 1, column = 1)

Приведем пример программы графический интерфейс на Python с кнопкой и меткой, при нажатии на кнпоку название метки меняется на Меня нажали
import tkinter as tk

win = tk.Tk()

win.title(«itrobo.ru»)

win.geometry(«300×300»)

res = tk.Label(win, text = «-«)

res.grid(row = 3, column = 0)

def onclick():

    res.configure(text = «меня нажали»)

button = tk.Button(win, text = «нажми меня», command = onclick)

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

win.mainloop()

 

Элемент текстовое поле в графическом интерфейсе python

Для задания тектового поля в графическом пользовательском интерфейсе Python используется команда
имя текстового поля=tk.Entry(имя окна)

например команда
text1=tk.Entry(win)

cоздаст объект текстовое поле с именем text1 в окне win

для отображения в окне интерфейса python используется команда
имя элемента.grid(row=номер строки, column=номер столбца)

Например 
text1.grid(row=1,column=1)

Чтобы получить данные из текстового поля в Python используется команда
имя поля.get()

Например 
znach=float(text1.get())

записывает в переменную znach числовое значение поля text1

Пример программы с графическим пользовательским интерфейсом в Python простейший калькулятор

Сделаем программу калькулятор на Python. В двух текстовых полях пользователь вводит два числа. При нажатии на кнопку в метке будет показываться сумма этих чисел.

Введём два текстовых поля и метку. Первое поле назовём num1, второе num2, метку назовём res. Зададим кнопку button. Поля для ввода текста задаются с помощью команды tk.Entry(win)
num1 = tk.Entry(win)

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

num2 = tk.Entry(win)

num2.grid(row = 2, column = 0)

res = tk.Label(win, text = «-«)

res.grid(row = 3, column = 0)

Зададим кнопку button с помощью команды
button = tk.Button(win, text = “Сумма”)

button это название кнопки, win это окно, где отображается кнопка, text = “Сумма” это параметр, определяющий текст на кнопке.

Если вы просто зададите кнопку, запустите программу на Питоне и нажмёте на кнопку, ничего не произойдёт. Чтобы задать действие по нажатию кнопки, нужно использовать параметр кнопки command. Разберём процедуру нахождения суммы и нажатия кнопки.

При нажатии на кнопку в Python мы должны получить значения двух чисел в текстовых полях, сложить эти числа и вывести сумму в метку. Создадим для этого отдельную процедуру summation(). Подробно о процедурах в Python

Чтобы получить числа из текстовых полей в Питоне, используем команду num1.get() Обратите внимание, что текстовые поля всегда возвращают данные в виде строк, поэтому переведём их числа, используя команду float()
one = float(num1.get())

two = float(num2.get())

Теперь создадим переменную result, в которой будет храниться сумма полученных чисел.
result = one + two

После того, как мы задали метку res с результатом в Питон, нужно изменить текст в ней с “-” на результат. Это можно сделать с помощью команды res.configure(text) и форматированного вывода.
res.configure(text = «= %s» % result)

После того, как мы создали процедуру для вывода чисел в Python, назначим нажатие кнопки на неё. Это можно сделать, присвоив параметр command созданной процедуре.
button = tk.Button(win, text = «Сумма», command = summation)

button.grid(row = 1, column = 1)
Полный код программы на python с графическим пользовательским интерфейсом простейший калькулятор.
import tkinter as tk

win = tk.Tk()

win.title(«itrobo.ru»)

win.geometry(«400×400»)

num1 = tk.Entry(win)

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

num2 = tk.Entry(win)

num2.grid(row = 2, column = 0)

res = tk.Label(win, text = «-«)

res.grid(row = 3, column = 0)

def summation():

    one = float(num1.get())

    two = float(num2.get())

    result = one + two

    res.configure(text = «= %s» % result)

button = tk.Button(win, text = «Сумма», command = summation)

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

win.mainloop()

Вернуться к содержанию Следующая тема Словари в Питон

Поделиться:

 

 

Pythonicway — Примитивный Paint на Python

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

Для этого примера удобнее будет использовать классовый подход к созданию GUI. Для начала определим класс Paint:

from tkinter import *

class Paint(Frame):
    def __init__(self, parent):
         Frame.__init__(self, parent)
         self.parent = parent


def main():
    root = Tk()
    root.geometry("1920x1080+300+300")
    app = Paint(root)
    root.mainloop()

if __name__ == "__main__":
    main()

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

Теперь напишем для класса Paint метод setUI, в котором будет задаваться расположение всех кнопок, меток и самого поля для рисования. У нас будет два ряда кнопок, первый ряд с кнопками устанавливающими цвет, второй ряд устанавливает размер кисти для рисования. Под ними будет идти поле для рисования.

Это достаточно объемный метод, однако многие строки повторяются, так что наберитесь терпения:

def setUI(self):

        self.parent.title("Pythonicway PyPaint")  # Устанавливаем название окна
        self.pack(fill=BOTH, expand=1)  # Размещаем активные элементы на родительском окне

        self.columnconfigure(6, weight=1) # Даем седьмому столбцу возможность растягиваться, благодаря чему кнопки не будут разъезжаться при ресайзе
        self.rowconfigure(2, weight=1) # То же самое для третьего ряда

        self.canv = Canvas(self, bg="white")  # Создаем поле для рисования, устанавливаем белый фон
        self.canv.grid(row=2, column=0, columnspan=7,
                       padx=5, pady=5, sticky=E+W+S+N)  # Прикрепляем канвас методом grid. Он будет находится в 3м ряду, первой колонке, и будет занимать 7 колонок, задаем отступы по X и Y в 5 пикселей, и заставляем растягиваться при растягивании всего окна

        color_lab = Label(self, text="Color: ") # Создаем метку для кнопок изменения цвета кисти
        color_lab.grid(row=0, column=0, padx=6) # Устанавливаем созданную метку в первый ряд и первую колонку, задаем горизонтальный отступ в 6 пикселей

        red_btn = Button(self, text="Red", width=10) # Создание кнопки:  Установка текста кнопки, задание ширины кнопки (10 символов)
        red_btn.grid(row=0, column=1) # Устанавливаем кнопку первый ряд, вторая колонка

        # Создание остальных кнопок повторяет ту же логику, что и создание
        # кнопки установки красного цвета, отличаются лишь аргументы.

        green_btn = Button(self, text="Green", width=10)
        green_btn.grid(row=0, column=2)

        blue_btn = Button(self, text="Blue", width=10)
        blue_btn.grid(row=0, column=3)

        black_btn = Button(self, text="Black", width=10)
        black_btn.grid(row=0, column=4)

        white_btn = Button(self, text="White", width=10)
        white_btn.grid(row=0, column=5)


        size_lab = Label(self, text="Brush size: ") # Создаем метку для кнопок изменения размера кисти
        size_lab.grid(row=1, column=0, padx=5)
        one_btn = Button(self, text="Two", width=10)
        one_btn.grid(row=1, column=1)

        two_btn = Button(self, text="Five", width=10)
        two_btn.grid(row=1, column=2)

        five_btn = Button(self, text="Seven", width=10)
        five_btn.grid(row=1, column=3)

        seven_btn = Button(self, text="Ten", width=10)
        seven_btn.grid(row=1, column=4)

        ten_btn = Button(self, text="Twenty", width=10)
        ten_btn.grid(row=1, column=5)

        twenty_btn = Button(self, text="Fifty", width=10)
        twenty_btn.grid(row=1, column=6, sticky=W)


Не забудьте добавить вызов этого метода в __init__, чтобы все работало.

self.setUI()

Если вы сделали все верно, то при запуске всего кода вы увидите следующее окно:

Теперь создадим метод рисования на холсте. Для начала создадим переменные класса устанавливающие размер и цвет кисти, в метод __init__ допишите:

self.brush_size = 10
self.brush_color = "black"

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

def draw(self, event):
    self.canv.create_oval(event.x - self.brush_size,
                          event.y - self.brush_size,
                          event.x + self.brush_size,
                          event.y + self.brush_size,
                          fill=self.color, outline=self.color)

Рисование осуществляется путем создания кругов на холсте: пользователь зажимает левую кнопку мыши и при движении мышью, по пути следования курсора будут отрисовываться круги. Метод draw принимает аргумент event, на основе которого мы будем формировать овалы. Метод create_oval класса Canvas получает четыре координаты, на основе которых создается квадрат, в который вписывается круг. В качестве этих координат мы передаем позицию курсора, поэтому первая координата по оси икс будет позиция курсора минус размер кисти, вторая координата по оси икс — позиция курсора плюс размер кисти, то же самое для оси игрек. Это может показаться сложным, но скоро вы запустите наше приложение и увидите все своими глазами.

Осталось только привязать к канвасу обработку только что созданного метода. Добавьте следую строку после прикрепления канваса (self.canvas.grid…)

self.canv.bind("<B1-Motion>", self.draw) 

<B1-Motion> означает «при движении зажатой левой кнопки мыши» вызывать метод draw. Теперь мы можем рисовать!

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

    def set_color(self, new_color):
        self.color = new_color

 После этого в каждой кнопке верхнего ряда следует добавить код обработки нажатия этой кнопки по следующему шаблону:

red_btn = Button(self, text="Red", width=10, command=lambda: self.set_color("red"))
red_btn.grid(row=0, column=1)

Код который мы добавили — command = lambda: self.set_color(«red»), привязывает функцию с нужным нам аргументом к кнопке. Мы используем lambda-функцию потому-что, без lambda функция вызовется сразу при создании кнопки, а не только при ее нажатии. (Можете попробовать такую строку command = self.set_color(«red») и цвет сразу установится на красный). Добавив этот код с нужными аргументами (а это «green», «blue», «black», «white») ко всем кнопкам получим возможность изменять цвет кисти:

Теперь добавим метод изменения размера кисти:

def set_brush_size(self, new_size):
    self.brush_size = new_size

И модернизируем код каждой кнопки нижнего ряда по следующему шаблону:

one_btn = Button(self, text="Two", width=10, command=lambda: self.set_brush_size(2))

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

 

На этом практически все, осталось добавить функционал очистки холста. Мы оставили место в верхнем ряду кнопок, его и заполним. Добавьте следующий код в наш метод setUI:

clear_btn = Button(self, text="Clear all", width=10, command=lambda: self.canv.delete("all"))
clear_btn.grid(row=0, column=6, sticky=W)

Для очистки холста мы используем метод delete класса Canvas, чтобы удалить все с холста в качестве аргумента методу delete мы передаем «all». Вот и все, у нас есть примитивный Paint.

P.S.: Запустив данное приложение, вы заметите, что если провести мышкой быстро, то линии у нас получаются прерывчастыми. Это вызвано тем, что движение происходит быстрее, чем завершается очередной цикл root.mainloop, соответственно все, что попадает «между» итерациями цикла пропадает. Решение этой проблемы само по себе достаточно интересное задание, однако оно требует намного более сложного кода.

P.P.S: Исходный код проекта на GitHub

Python Tkinter. Часть 2

Вы здесь:
Главная — Python — Python Tkinter. Часть 2


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

Как изменить цвет текста на кнопке и цвет самой кнопки в Tkinter?

Сражу покажу код:




btn = Button(window, text="Нажмите на кнопку", bg="pink", fg="white")


Но кнопка сама по себе мало что значит, если после нажатия на нее ничего не происходит. Поэтому на кнопку надо добавить какое-либо действие. Делается это с помощью обработчиков событий (по аналогии с JavaScript).




def btnClicked():

lbl.configure(text="Вы нажали на кнопку!!!")

// window - ссылка на окно

// text - текст кнопки

// command - ссылка на обработчик нажатия клавиши

btn = Button(window, text="Нажмите на кнопку", command=btnClicked)


Полный код:




from tkinter import *

 

window = Tk()

 

window.title("Мое приложение")

window.geometry('350x200')

 

lbl = Label(window, text="Метка")

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

 

def btnClicked():

lbl.configure(text="Вы нажали на кнопку!!!")

// window - ссылка на окно

// text - текст кнопки

// command - ссылка на обработчик нажатия клавиши

btn = Button(window, text="Нажмите на кнопку", command=btnClicked)

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

 

window.mainloop()


Считываем пользовательский ввод через Entry класс (текстовое поле Tkinter)

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




txt = Entry(window,width=10)


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




from tkinter import *

 

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)

def btnClicked():

lbl.configure(text="Вы нажали на кнопку!!!")

// window - ссылка на окно

// text - текст кнопки

// command - ссылка на обработчик нажатия клавиши

btn = Button(window, text="Нажмите на кнопку", command=btnClicked)

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

 

window.mainloop()


Таким образом, вот так можно добавить обработчики событий на кнопку в Python Tkinter.


  • Создано 21.11.2019 13:58:42



  • Михаил Русаков

Предыдущая статья

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):


  1. Кнопка:

    <a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>

    Она выглядит вот так:


  2. Текстовая ссылка:
    <a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    [URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]

Примеры графического интерфейса Python (Tkinter Tutorial)

В этом руководстве мы узнаем, как разрабатывать графические пользовательские интерфейсы, написав несколько примеров графического интерфейса Python с использованием пакета Tkinter. Пакет Tkinter поставляется с Python в качестве стандартного пакета, поэтому нам не нужно ничего устанавливать для его использования. Пакет Tkinter — очень мощный пакет. Если вы уже установили Python, вы можете использовать IDLE, которая является интегрированной IDE, поставляемой с Python, эта IDE написана с использованием Tkinter. Звучит круто!! Мы будем использовать Python 3.6, поэтому, если вы используете Python 2.x, настоятельно рекомендуется переключиться на Python 3.x, если вы не знаете, что язык меняется, чтобы вы могли настроить код для работы без ошибок. Я предполагаю, что вы немного знакомы с основами Python, чтобы помочь вам понять, что мы делаем. Мы начнем с создания окна, затем узнаем, как добавлять виджеты, такие как кнопки, поля со списком и т. Д., А затем поиграем с их свойствами, так что приступим.

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

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

из tkinter import *

window = Tk ()

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

window.mainloop ()

Результат будет примерно таким:

Отлично !! Наше приложение просто работает.

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

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

Создание виджета метки

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

lbl = Label (window, text = "Hello")

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

фунт.grid (column = 0, row = 0)

Итак, полный код будет таким:

из импорта tkinter *

window = Tk ()

window.title ("Добро пожаловать в LikeGeeks app ")

lbl = Label (window, text =" Hello ")

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

window.mainloop ()

А это результат:

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

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

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

Для этого вы можете передать параметр шрифта следующим образом:

lbl = Label (window, text = "Hello", font = ("Arial Bold", 50))

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

Отлично, но окно такое маленькое, что видно даже заголовок, а как насчет настройки размера окна?

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

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

окно.geometry ('350x200')

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

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

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

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

btn = Button (window, text = "Click Me")

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

Итак, наше окно будет таким:

из tkinter import *

window = Tk ()

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

window.geometry ('350x200')

lbl = Label (window, text = "Hello")

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

btn = Button (window, text = "Click Me")

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

window.mainloop ()

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

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

Изменение цвета переднего плана и фона кнопки

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

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

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

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

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

def clicked ():

lbl.configure (text = "Нажата кнопка !!" )

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

btn = Button (window, text = «Click Me» , command = clicked)

Обратите внимание, что , мы набрали щелкнули только не нажал () скобками.

Теперь полный код будет таким:

из tkinter import *

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry ( '350x200')

lbl = Label (window, text = "Hello")

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

def clicked ():

lbl .configure (text = "Нажата кнопка !!")

btn = Кнопка (window, text = "Click Me", command = clicked)

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

window.mainloop ()

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

Cool !!

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

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

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

txt = Entry (window, width = 10)

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

Итак, наше окно будет вот так:

из tkinter import *

window = Tk ()

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

window.geometry ('350x200')

lbl = Label (window, text = "Hello")

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

txt = Entry (window, width = 10)

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

def clicked ():

lbl.configure ( text = "Нажата кнопка !!")

btn = Button (window, text = "Click Me", command = clicked)

btn.grid (column = 2, row = 0)

window.mainloop ()

И результат будет таким:

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

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

def clicked ():

res = "Welcome to" + txt.get ()

lbl.configure (text = res)

Если вы нажмете кнопку, и в виджете ввода есть текст, отобразится «Добро пожаловать», объединенное с введенным текстом.

И это полный код:

из tkinter import *

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry ('350x200 ')

lbl = Label (window, text = "Hello")

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

txt = Entry (window, width = 10)

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

def clicked ():

res = "Добро пожаловать" + txt.get ()

lbl.configure (text = res)

btn = Button (window, text = "Click Me", command = clicked)

btn.grid (column = 2, row = 0)

window.mainloop ()

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

Awesome !!

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

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

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

txt.focus ()

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

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

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

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

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

Добавить виджет combobox

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

from tkinter.ttk import *

combo = Combobox (window)

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

из tkinter import *

из tkinter.ttk import *

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry (' 350x200 ')

combo = Combobox (окно)

combo [' values ​​'] = (1, 2, 3, 4, 5, «Текст»)

combo.current (1) # установить выбранный элемент

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

window.mainloop ()

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

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

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

combo.get ()

Добавить виджет Checkbutton (флажок Tkinter)

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

chk = Checkbutton (window, text = 'Choose')

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

из tkinter import *

from tkinter .ttk import *

window = Tk ()

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

window.geometry ('350x200')

chk_state = Boole10

()

chk_state.set (True) #set check state

chk = Checkbutton (window, text = 'Choose', var = chk_state)

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

window.mainloop ()

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

Установить состояние проверки Checkbutton

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

Вы можете установить логическое значение false, чтобы отключить его.

Кроме того, вы можете использовать IntVar вместо BooleanVar и установить значение 0 или 1.

chk_state = IntVar ()

chk_state.set (0) #uncheck

chk_state.set (1) #check

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

Добавить виджеты радиокнопок

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

rad1 = Radiobutton (window, text = 'First', value = 1)

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

из tkinter import *

из tkinter.ttk import *

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry (' 350x200 ')

rad1 = Radiobutton (window, text =' First ', value = 1)

rad2 = Radiobutton (window, text =' Second ', value = 2)

rad3 = Radiobutton (окно, текст = 'Третий', значение = 3)

рад1.grid (column = 0, row = 0)

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

rad3.grid (column = 2, row = 0)

window.mainloop ( )

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

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

Это пример:

rad1 = Radiobutton (window, text = 'First', value = 1, command = clicked)

def clicked ():

# Делайте то, что вам нужно

Довольно просто !!

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

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

из tkinter import *

из tkinter.ttk import *

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

selected = IntVar ()

rad1 = Radiobutton (window, text = 'First', value = 1, variable = selected)

rad2 = Radiobutton (window, text = 'Second', value = 2, variable = selected)

rad3 = Radiobutton (window, text = 'Third', value = 3, variable = selected)

def clicked ():

print (selected.get ())

btn = Button (window, text = "Click Me", command = clicked)

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

rad2.grid (column = 1, строка = 0)

rad3.grid (столбец = 2, строка = 0)

btn.grid (столбец = 3, строка = 0)

window.mainloop ()

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

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

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

из tkinter import scrolledtext

txt = scrolledext, (scrolledtext, height = 10)

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

из tkinter import *

из tkinter import scrolledtext

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry ('350x200')

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

txt.grid (столбец = 0, row = 0)

window.mainloop ()

Результат, как вы можете видеть:

Установить содержимое прокрученного текста

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

txt.insert (INSERT, 'You text go here')

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

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

txt.delete (1.0, END)

Отлично !!

Создание окна сообщений

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

из окна сообщений импорта tkinter

messagebox.showinfo ('Заголовок сообщения', 'Содержимое сообщения')

Довольно просто !!

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

из tkinter import *

из окна сообщений импорта tkinter

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

window.geometry ('350x200')

def clicked ():

messagebox.showinfo ('Заголовок сообщения', 'Содержание сообщения')

btn = Кнопка (окно, текст = 'Нажмите здесь', команда = нажата)

btn.grid (столбец = 0, строка = 0)

window.mainloop ()

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

Показывать предупреждения и сообщения об ошибках

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

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

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

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

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

из окна сообщений импорта tkinter

res = messagebox.askquestion ('Заголовок сообщения', 'Содержание сообщения')

res = messagebox.askyesno ('Заголовок сообщения', 'Содержание сообщения')

res = messagebox.askyesnocancel ('Заголовок сообщения', 'Содержимое сообщения ')

res = messagebox.askokcancel (' Заголовок сообщения ',' Содержание сообщения ')

res = messagebox.askretrycancel (' Заголовок сообщения ',' Содержание сообщения ')

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

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

Если вы нажмете OK или да или повторите попытку , он вернет значение True , но если вы выберете нет или отменить , он вернет Ложь .

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

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

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

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

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

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

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

Проверьте полный пример:

from tkinter import *

window = Tk ()

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

window.geometry ('350x200')

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

spin.grid (столбец = 0, строка = 0)

window.mainloop ()

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

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

Здесь виджет Spinbox показывает только эти 3 числа, только 3, 8 и 11.

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

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

var = IntVar ()

var.set (36)

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

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

Добавить виджет Progressbar

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

из tkinter.ttk import Progressbar

bar = Progressbar (window, length = 200)

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

bar ['value'] = 70

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

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

Изменить цвет Progressbar немного сложно, но очень просто.

Сначала мы создадим стиль, установим цвет фона и, наконец, установим созданный стиль на Progressbar.

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

из tkinter import *

из tkinter.ttk import Progressbar

из tkinter import ttk

window = Tk ()

window. Добро пожаловать в приложение LikeGeeks ")

window.geometry ('350x200')

style = ttk.Style ()

style.theme_use ('default')

style.configure (" черный.Horizontal.TProgressbar ", background = 'black')

bar = Progressbar (window, length = 200,)

bar ['value'] = 70

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

window.mainloop ()

Результат будет таким:

Добавьте диалоговое окно (средство выбора файлов и каталогов)

Чтобы создать диалоговое окно файла (средство выбора файлов), вы можно использовать класс filedialog следующим образом:

из tkinter import filedialog

file = filedialog.askopenfilename ()

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

Кроме того, вы можете запросить несколько файлов, например:

files = filedialog.askopenfilenames ()

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

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

file = filedialog.askopenfilename (filetypes = (("Текстовые файлы", "*.txt "), (" все файлы "," *. * ")))

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

dir = filedialog.askdirectory ()

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

from os import path

file = filedialog.askopenfilename (initialdir = path.dirname (__ file__))

Easy !!

Чтобы добавить меню bar, вы можете использовать класс меню следующим образом:
“crayon-5a6ed64ac76ec001310365 ″ class =” crayon-syntax crayon-theme-xcode-xcode crayon-font-monaco crayon-os-pc print-yes notranslate ”data-settings =” minim scroll- mouseover »

из tkinter import Menu

menu = Меню (окно)

menu.add_command (label = 'File')

window.config (menu = menu)

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

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

menu.add_cascade (label = 'File', menu = new_item)

Итак, наш код будет таким:

from tkinter import *

from tkinter import Menu

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

menu = Menu (окно)

new_item = Menu (меню)

new_item.add_command (label = 'New')

menu.add_cascade (label = 'File', menu = new_item)

window.config (menu = menu)

window.mainloop ()

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

из tkinter import *

из tkinter import Menu

window = Tk ()

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

menu = Меню (окно)

new_item = Меню (меню)

new_item.add_command (label = 'New')

_item.add ()

new_item.add_command (label = 'Edit')

menu.add_cascade (label = 'File', menu = new_item)

window.config (menu = menu)

window.mainloop ()

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

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

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

new_item = Menu (menu, tearoff = 0)

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

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

new_item.add_command (label = 'New', command = clicked)

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

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

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

из tkinter import *

из tkinter import ttk

window = Tk ()

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

tab_control = ttk.Notebook (окно)

tab1 = ttk.Frame (tab_control)

tab_control.add (tab1, text = 'First')

tab_control.pack (expand = 1, fill = 'both')

window.mainloop ()

Таким же образом вы можете добавить сколько угодно вкладок.

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

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

из tkinter import *

из tkinter import ttk

window = Tk ()

window.title («Добро пожаловать в приложение LikeGeeks»)

tab_Notebook = tt )

tab1 = ttk.Frame (tab_control)

tab2 = ttk.Frame (tab_control)

tab_control.add (tab1, text = 'First')

9000add tab_control (tab_control2) , text = ‘Second’)

lbl1 = Label (tab1, text = 'label1')

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

lbl2 = Label (tab2, text = 'label2')

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

tab_control.pack ( expand = 1, fill = 'both')

window.mainloop ()

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

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

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

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

Вот и все!

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

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

Надеюсь, эти примеры вам пригодятся. Продолжают возвращаться.

Спасибо.

лайка-гика.com

Приложение чата с графическим интерфейсом пользователя с использованием Tkinter на Python

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

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

Сценарий на стороне сервера: Имя этого файла сценария — client.py (скажем).
Поскольку взаимодействовать будут только клиенты, сценарий сервера не имеет графического интерфейса пользователя

Python3

импорт розетка

импорт резьба

ПОРТ = 5000

СЕРВЕР = сокет.gethostbyname (socket.gethostname ())

АДРЕС = (СЕРВЕР, ПОРТ)

ФОРМАТ = "utf-8"

клиентов, имена = [], []

сервер = socket.socket (socket.AF_INET,

розетка.SOCK_STREAM)

server.bind (АДРЕС)

по умолчанию startChat ():

печать ( "сервер работает на" + СЕРВЕР)

server.listen ()

в то время как True :

соединение, адрес = сервер.принять ()

отправка соед. ( "НАЗВАНИЕ" . Кодировать ( FORMAT ))

имя = conn.recv ( 1024 ) .decode ( FORMAT )

фамилий.добавить (имя)

client.append (conn)

print (f

Учебники по программированию на Python

Программирование графических интерфейсов и окон с помощью Tkinter и Python Введение

Привет и добро пожаловать в мою мега-серию Tkinter, где я расскажу вам о создании реального приложения, созданного с помощью Python и Tkinter.

Вы просто ищете основы Tkinter? Ознакомьтесь с мини-сериалом из серии основ Python 3 здесь: Основы Tkinter

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

Мы собираемся сделать торговое приложение для биткойнов. Приложение будет в основном:

  • Есть несколько окон / навигации.
  • Имейте живые графики Matplotlib, отображающие цену биткойнов с различных бирж.
  • Разрешить пользователю выполнять сделки вручную.
  • Разрешить пользователю выполнять сделки автоматически.

Это займет у нас достаточно времени, и даже эти четыре вещи очень подробны. Основная проблема при использовании Python для этого приложения — это распределение ресурсов. Python, естественно, однопоточный и очень линейный. Если выполнение какой-либо отдельной операции занимает некоторое время, все приложение остановится, пока эта операция выполняется.Это огромный недостаток, и это основная причина, по которой люди сразу отказываются от Python за создание всевозможных программ, включая приложения с графическим интерфейсом. Это позор, поскольку вы можете очень легко использовать потоки Python и многое другое. Здесь мы не сможем использовать обработку графическим процессором, но это тоже еще один вариант, но он сильно ограничит количество людей, которые смогут использовать приложение (ограничиваясь людьми с графическими процессорами Nvidia с поддержкой CUDA).

Хотя все это может показаться очень запутанным и устрашающим, я планирую держать вас за руку на протяжении всего процесса, объясняя все на каждом этапе.Если вы когда-нибудь заблудитесь, вы всегда можете прокомментировать соответствующий обучающий видеоролик YouTube, который включен в каждый раздел, и я буду рад вам помочь.

Итак, приступим!

Следующий учебник: ускоренный курс по объектно-ориентированному программированию с Tkinter

Python Tkinter Örnekleri — Yazılım Bilişim Programlama

Hızlı şekilde Python form örnekleri oluşturmak için Python ile tümleşik gelen Tkinter kütüphanesini kullanacağız.

Python Tkinter Nedir: Tkinter, Python стандартный GUI kütüphanesidir. Python, Tkinter ile birleştirildiğinde GUI uygulamaları yani form uygulamaları oluşturmanın hızlı ve kolay bir yolunu sunar.

Форма Python Oluşturma

#! / usr / bin / python
#https: //www.yazilimbilisim.net

импортный tkinter

nesne = tkinter.Tk ()
nesne.mainloop ()

#! / Usr / bin / python

# https: // www.yazilimbilisim.net

import tkinter

nesne = tkinter.Tk ()

nesne.mainloop ()

Питон Бутон Oluşturma

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)
pencere.geometry («600×300»)

uygulama = Рамка (пенцере)
уйгулама.сетка ()

#button ekleme bölümü
button1 = Кнопка (uygulama, text = «KAPAT», width = 50, height = 5, command = exit)
button1.grid (padx = 110, pady = 80)

pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («600×300»)

uygulama = Frame (pencere)

uygulama.grid ()

ü0003 кнопка 9ö0003 = Кнопка (uygulama, text = «KAPAT», width = 50, height = 5, command = exit)

button1.grid (padx = 110, pady = 80)

pencere.mainloop ()

Окно сообщений Tkinter oluşturma

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

пенсер.название («www.yazilimbilisim.net»)
pencere.geometry («600×300»)

uygulama = Рамка (пенцере)
uygulama.grid ()

def dialog ():
var = messagebox.showinfo («Уяры», «www.yazilimbilisim.net»)

button1 = Кнопка (uygulama, text = «Uyarı Ver», width = 20, command = dialog)
button1.grid (padx = 110, pady = 80)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («600×300»)

uygulama = Frame (pencere)

uygulama.grid ()

003 def диалоговое окно

:

: var = messagebox.showinfo («Uyarı», «www.yazilimbilisim.net»)

button1 = Button (uygulama, text = «Uyarı Ver», width = 20, command = dialog)

button1.grid (padx = 110, пады = 80)

#formu çiz

pencere.mainloop ()

Этикетка Python Kullanımı

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)
pencere.geometry («400×200»)

#formu grid olarak çizdirme / layout düzeni
uygulama = Рамка (пенцере)
uygulama.grid ()

#label nesnesini çiz
etiket = Этикетка (uygulama, text = «www.yazilimbilisim.net «)
etiket.grid (padx = 110, pady = 10)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («400×200»)

#formu grid olarak çizdirme / layout düzeni

uygulama = Frame (pencere)

0002 uygulama 9.grid ()

0003.grid

#label nesnesini çiz

etiket = Label (uygulama, text = «www.yazilimbilisim.net»)

etiket.grid (padx = 110, pady = 10)

9000iz2 # pencere.mainloop ()

Python Tkinter Label Kullanımı

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

пенсер.название («www.yazilimbilisim.net»)
pencere.geometry («400×300»)

uygulama = Рамка (пенцере)
uygulama.grid ()

#mesaj fonksiyonu
def dialog ():
var = messagebox.showinfo («Уяры», «www.yazilimbilisim.net»)

#buton nesnesini çiz ve fonksiyonu bağla
button1 = Кнопка (uygulama, text = «Uyarı Ver», width = 20, command = dialog)
button1.grid (padx = 110, pady = 70)

#label nesnesini çiz
etiket = Этикетка (uygulama, text = «www.yazilimbilisim.net»)
этикет.сетка (padx = 110, pady = 10)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

25

26

27

28

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («400×300»)

uygulama = Frame (pencere)

uygulama.grid ()

#mesaj fonksiyonu 9000 dialog (

def 9000) :

var = messagebox.showinfo («Uyarı», «www.yazilimbilisim.net»)

#buton nesnesini çiz ve fonksiyonu bağla

button1 = Кнопка (uygulama, text = «Uyar 20ı Ver», ширина , command = dialog)

button1.grid (padx = 110, pady = 70)

#label nesnesini çiz

etiket = Label (uygulama, text = «www.yazilimbilisim.net «)

etiket.grid (padx = 110, pady = 10)

#formu çiz

pencere.mainloop ()

Python Tkinter CheckBox Kullanımı

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)
pencere.geometry («400×300»)

# сетка çizdirme
uygulama = Рамка (пенцере)
уйгулама.сетка ()

chek1 = Checkbutton (uygulama, text = «Kitap Okuma», onvalue = 1, offvalue = 0, height = 5, width = 20)
chek1.grid (padx = 110, pady = 10)

chek2 = Checkbutton (uygulama, text = «Spor Yapma», onvalue = 1, offvalue = 0, height = 5, width = 20)
chek2.grid (padx = 110, pady = 5)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («400×300»)

#grid form çizdirme

uygulama = Frame (pencere)

uygulama.grid ()

= Checkbutton (uygulama, text = «Kitap Okuma», onvalue = 1, offvalue = 0, height = 5, width = 20)

chek1.grid (padx = 110, pady = 10)

chek2 = Checkbutton ( uygulama, text = «Spor Yapma», onvalue = 1, offvalue = 0, height = 5, width = 20)

chek2.сетка (padx = 110, pady = 5)

#formu çiz

pencere.mainloop ()

Python Tkinter Entry Kullanımı

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)
pencere.geometry («400×300»)

# сетка çizdirme
uygulama = Рамка (пенцере)
уйгулама.сетка ()

L1 = Этикетка (uygulama, text = «Adınızı Girin»)
L1.grid (padx = 110, pady = 10)

E1 = Вход (uygulama, bd = 2)
E1.grid (padx = 110, pady = 3)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («400×300»)

#grid form çizdirme

uygulama = Frame (pencere)

uygulama.grid ()

= Метка (uygulama, text = «Adınızı Girin»)

L1.grid (padx = 110, pady = 10)

E1 = Entry (uygulama, bd = 2)

E1.grid (padx = 110, pady = 3)

#formu çiz

pencere.mainloop ()

Python Tkinter ListBox Kullanımı

из tkinter import *

из окна сообщений импорта tkinter

pencere = Tk ()

пенсер.название («www.yazilimbilisim.net»)
pencere.geometry («400×300»)

# сетка çizdirme
uygulama = Рамка (пенцере)
uygulama.grid ()

Lb1 = Список (уйгулама)
Lb1.insert (1, «Python»)
Lb1.insert (2, «C #»)
Lb1.insert (3, «ЯВА»)
Lb1.insert (4, «JAVASCRIPT»)
Lb1.grid (padx = 110, pady = 10)

#formu çiz
pencere.mainloop ()

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

24

25

из tkinter import *

из tkinter import messagebox

pencere = Tk ()

pencere.title («www.yazilimbilisim.net»)

pencere.geometry («400×300»)

#grid form çizdirme

uygulama = Frame (pencere)

uygulama.grid ()

= Listbox (uygulama)

Lb1.insert (1, «Python»)

Lb1.insert (2, «C #»)

Lb1.insert (3, «JAVA»)

Lb1.insert (4, » JAVASCRIPT «)

Lb1.grid (padx = 110, pady = 10)

#formu çiz

pencere.mainloop ()

Beğendim! 34
5

İlgili

Visual Tkinter Python IDE скачать

ФИО

Телефонный номер

Название работы

Промышленность

Компания

Размер компании

Размер компании: 1 — 2526 — 99100 — 499500 — 9991,000 — 4,9995,000 — 9,99910,000 — 19,99920,000 или более

Получайте уведомления об обновлениях для этого проекта.Получите информационный бюллетень SourceForge.

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

Да, также присылайте мне специальные предложения о продуктах и ​​услугах, касающихся:

Программное обеспечение для бизнеса

Программное обеспечение с открытым исходным кодом

Информационные технологии

Программирование

Оборудование

Вы можете связаться со мной через:

Электронная почта (обязательно)

Телефон

смс

Я согласен получать эти сообщения от SourceForge.сеть. Я понимаю, что могу отозвать свое согласие в любое время. Пожалуйста, обратитесь к нашим Условиям использования и Политике конфиденциальности или свяжитесь с нами для получения более подробной информации.

Я согласен получать эти сообщения от SourceForge.net указанными выше способами. Я понимаю, что могу отозвать свое согласие в любое время. Пожалуйста, обратитесь к нашим Условиям использования и Политике конфиденциальности или свяжитесь с нами для получения более подробной информации.

Для этой формы требуется JavaScript.

Подписывайся

Кажется, у вас отключен CSS.Пожалуйста, не заполняйте это поле.

Кажется, у вас отключен CSS.
Пожалуйста, не заполняйте это поле.

Python GUI 编程 (Tkinter) |菜鸟 教程

Python — это графический интерфейс Python для графического интерфейса пользователя

.

  • Tkinter : Tkinter 模块 (Tk 接口) Python 的 标准 Tk GUI 的 接口 .Tk 和 Tkinter 大多数 的. Unix, 可以 Windows 和 Macintosh 系统.的 后续 中本 实现 本地 窗口 风格, 并 良好 地 运行 在 绝大多数 平台 中。

  • wxPython : wxPython 开源 软件 , Python 的 一套 的 GUI 的 Python 的 创建 完整

  • Jython Jython 程序 可以 和 Java 无缝 集成。 除了 一些 模块 Jython 使用 Java 的 模块 。Jython 几乎 拥有 的 Python 中 不 依赖 于 C 比如 Jython Swing , AWT 或者 ​​SWT。Jython 可以 被 动态 或 静态 地 编译 成 Java 字节 码。


Tkinter 编程

Tkinter, Python, графический интерфейс пользователя, Python, Tkinter, графический интерфейс пользователя, графический интерфейс

kin Tkinter python 的 安装 包 中 、 只要 安装 Python 之后 import Tkinter 、 而且 IDLE 也是 用 Tkinter 编写 的 图形 界面 Tkinter 还是 能 自如。

注意 : Python3.x 中本 使用 的 库 名为 tkinter, 即 首 写 字母 T 为 小写。

 импортный tkinter 

创建 一个 Графический интерфейс 程序

  • 1 、 导入 Tkinter 模块
  • 2 创建 控件
  • 3 指定 这个 控件 的 master , 即 这个 控件 属于 哪 一个
  • 4 、 告诉 GM (менеджер по геометрии) 有 一个 控件 产生 了。

实例 (Python3.x)

импортный tkinter
top = tkinter.Tk ()

top.mainloop ()

实例 (Python2.x)

импорт Tkinter
top = Tkinter.Tk ()

top.mainloop ()

代码 执行 结果 如下 图:

实例

из Tkinter импорт *

корень = Tk ()

li = [‘C’, ‘python’, ‘php’, ‘html’, ‘SQL’, ‘java’]
movie = [‘CSS’, ‘jQuery’, ‘Bootstrap’]
listb = Список (корень)
listb2 = Список (корень)
для элемента в li:
списокb.вставить (0, элемент)

для элемента в фильме:
listb2.insert (0, элемент)

listb.pack ()
listb2.pack ()
root.mainloop ()

代码 执行 结果 如下 图:


Tkinter 组件

Tkinter 的 各种 控件 , 如 标签 和 文本 框 , GUI 应用 程序 中 使用。 这些 控件 称为。

有 15 Tkinter 的 部件。 我们 提出 这些 部件 以及 一个 简短 的 介绍 , 在 的 表:

的 窗口 布局。

控件 描述
Пуговица 按钮 控件 ; 在 程序 中 显示 按钮。
Холст 画布 控件 ; 显示 图形 元素1689

; 显示 图形 1690 914 914 1690 914 914 914 914控件 ; 用于 在 程序 中 提供 多项 选择 框
Entry 输入 控件 ; 用于 显示 简单 的 文本 内容
Frame 框架 控件 ; 在 屏幕容器
Ярлык 标签 控件 ; 可以 显示 文本 和 位 图
Окно списка 列表 框 控件 ; 在 Окно списка 窗口 小 部件 是 用来 1414 914 914 1689

菜单 按钮 控件 , 用于 显示
Меню 菜单 控件 ; 显示 菜单 栏, 下拉 菜单 和 弹出 菜单
Сообщение 消息 控件 ; 用来 本类似
Radiobutton 单选 按钮 控件 ; 显示 一个 的 的 按钮 状态
Scale 范围 14 16 923 916bar 916 923 23条 控件 , 当 内容 超过 可视 化 区域 时 使用 , 。.
Текст 文本 控件 ; 用于 显示 多 行 文本
Toplevel 容器 控件 提供 一个 单独 Frame 类似
Entry , 但是 可以 指定 值
PanedWindow PanedWindow 窗口 布局 的 插件 ,
labelframe
tkMessageBox 用于 显示 你 应用 的 消息 框。

属性

标准 属性 也 就是 所有 的 共同 属性 , 如 大小 , 字体 和 颜色 等等。

属性 描述
Размер 控件 大小 ;
Цвет 控件 颜色 ;
Шрифт 控件 字体 ;
Якорь 锚点 ;
Рельеф 控件 样式 ;
Растровое изображение 位 图 ;
Курсор 光标 ;

几何 管理

Tkinter 有 特定 的 几何 状态 管理 方法 , 管理 整个 控件 区域 组织 , 以下 Tkinter 公开 的 几何 管理 类 : 网 、 位置

几何 方法 描述
упаковка () 包装 ;
сетка () 网 格 ;
место () 位置 ;

.

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

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