Создаём графический интерфейс на Python за 10 минут
Python — язык программирования для решения разных задач: на нём можно как играть в угадайку чисел, так и создавать нейросети.
Но обычно работа с программой на Python идёт через командную строку: она отвечает тебе текстом, ты ей подаёшь на вход текст. Это хорошо, когда программа работает на сервере, но в бытовых ситуациях это не всегда удобно: хочется понажимать на кнопочки.
Сегодня мы научимся создавать графический интерфейс для программ — с кнопками, полями ввода и управление мышкой. А потом используем это для новых проектов.
Библиотека PySimpleGUI — простой интерфейс для Python
На самом деле у Python есть много библиотек, которые позволяют создать графический интерфейс — Tkinter, Qt, Remi или WxPython. Но проблема в том, что каждую из них нужно осваивать отдельно. Например, в одной удобно создавать графики, но неудобно — кнопки и надписи.
Чтобы сделать создание интерфейсов проще, придумали PySimpleGUI. Идея в том, чтобы объединить лучшие идеи из каждой библиотеки и написать для них внешнюю обёртку.
В итоге программисту на Python достаточно взять уже готовую команду создания кнопки, а отрисовку и внешний вид программа возьмёт на себя.
Ещё PySimpleGUI — это кросс-платформенное решение. Это значит, что интерфейсы, созданные с помощью этой библиотеки, будут работать одинаково на разных операционных системах.
Пара примеров, что можно сделать с PySimpleGUI:
Что для этого нужно
Для установки PySimpleGUI в командной строке компьютера или среды разработки пишем такую команду:
pip install pysimplegui
После этого библиотеку сразу можно подключать и использовать в проектах командой import PySimpleGUI . Но чтобы не писать каждый раз в коде такое громоздкое название, ей можно задать другое имя при подключении, например:
import PySimpleGUI as sg
Теперь нам достаточно написать sg вместо pysimplegui.

Создаём простой интерфейс
Сегодня мы посмотрим, как всё работает, и сделаем маленькую программу. Как разберёмся — возьмём проекты помасштабнее.
В редакторе кода создаём новый Python-файл и пишем такой код — в нём мы создаём простое окно с кнопкой и текстом:
# подключаем библиотеки import PySimpleGUI as sg import random # что будет внутри окна # первым описываем кнопку и сразу указываем размер шрифта layout = [[sg.Button('Новое число',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], # затем делаем текст [sg.Text('Результат:', size=(25, 1), key='-text-', font='Helvetica 16')]] # рисуем окно window = sg.Window('Генератор случайных чисел', layout, size=(350,100)) # запускаем основной бесконечный цикл while True: # получаем события, произошедшие в окне event, values = window.read() # если нажали на крестик if event in (sg.WIN_CLOSED, 'Exit'): # выходим из цикла break # закрываем окно и освобождаем используемые ресурсы window.close()

Мы только что создали простой графический интерфейс, указав только три параметра: размер окна, кнопку и текстовое поле. Так как мы не задавали дополнительных параметров, библиотека сама разместила элементы внутри окна. Ещё у нас не прописана внутренняя логика, поэтому при нажатии на кнопку ничего не произойдёт. Исправим это и привяжем нажатие кнопки к появлению нового случайного числа.
Выдаём случайные числа
При создании кнопки мы использовали такой параметр:
Это значит, что при нажатии на кнопку окно отправит внутреннее системное сообщение с текстом -FUNCTION-. Если мы привяжем свою функцию к этому сообщению, то она будет выполняться при каждом нажатии кнопки.
Чтобы связать функцию с сообщением от окна, добавим в конец основного цикла такую проверку:
# если нажали на кнопку if event == '-FUNCTION-': # запускаем связанную функцию update()
Теперь у нас есть привязанная функция update(), но в коде её ещё нет. Исправим это и добавим новую функцию сразу после команд импорта:
# обрабатываем нажатие на кнопку def update(): # получаем новое случайное число r = random.randint(1,100) # получаем доступ к текстовому элементу text_elem = window['-text-'] # выводим в него текст с новым числом text_elem.update("Результат: <>".format(r))
При нажатии на кнопку скрипт обработает системное сообщение и начнёт выполнять эту функцию: создаст новое случайное число и отправит его в текстовое поле.
Собираем всё вместе и запускаем программу:
Готовый код
# подключаем библиотеки import PySimpleGUI as sg import random # обрабатываем нажатие на кнопку def update(): # получаем новое случайное число r = random.randint(1,100) # получаем доступ к текстовому элементу text_elem = window['-text-'] # выводим в него текст с новым числом text_elem.update("Результат: <>".format(r)) # что будет внутри окна # первым описываем кнопку и сразу указываем размер шрифта layout = [[sg.Button('Новое число',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], # затем делаем текст [sg.Text('Результат:', size=(25, 1), key='-text-', font='Helvetica 16')]] # рисуем окно window = sg.Window('Генератор случайных чисел', layout, size=(350,100)) # запускаем основной бесконечный цикл while True: # получаем события, произошедшие в окне event, values = window.read() # если нажали на крестик if event in (sg.WIN_CLOSED, 'Exit'): # выходим из цикла break # если нажали на кнопку if event == '-FUNCTION-': # запускаем связанную функцию update() # закрываем окно и освобождаем используемые ресурсы window.close()
Что дальше
Мы сделали самый простой интерфейс и посмотрели, как можно связать внутреннюю логику и кнопки. В следующий раз используем это для более серьёзных проектов — нарисуем им свой интерфейс и научимся менять его внешний вид.
Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Самый быстрый способ написать свою первую программу на Python

Раз ты попал на эту статью, значить скорее всего ты уже знаешь, что python — это язык программирования. Но по сути python — всего лишь ещё одна программа на твоём компьютере. Мы что-то подаем на вход этой программе (чаще всего это текст) и получаем результат в виде вывода информации на экран или манипуляции с данными в операционной системе или сети интернет. Но нам нужно где-то писать эти программы. Забавно, мы используем программу для написания кода, чтобы с помощью программы python написать свою собственную программу. Существует 4 основных способа написания кода программы:
- В специализированных редакторах кода. Их еще называют IDE. На русский язык переводится как «интегрированная среда разработки». Самая популярная пожалуй PyCharm
- В текстовых радакторах. Например Sublime Text, Microsoft Visual Code, Atom, вплоть до Блокнота и другие. Как правило в них есть плагины (расширения) для удобной работы с языком python
- Используя консоль (“терминал”, “командная строка”) операционной системы.
- Используя онлайн компиляторы. Например: https://www.programiz.com/python-programming/online-compilerhttps://replit.com/languages/python3https://www.onlinegdb.com/online_python_compiler
В первых трех случаях вам необходимо скачать и установить минимум 1 программу — непосредственно сам python и возможно редактор кода, если он у вас не установлен. Но если вы хотите сразу попробовать свой код «в деле», тогда вы можете открыть онлайн компилятор в браузере, например по ссылке https://www.programiz.com/python-programming/online-compiler , написать там код как на картинке ниже.
Только вместо моего имени, подставьте свое. И нажмите на кнопку «Run». После этого вы удите на экране вывод «Меня зовут ».
Давайте подробней разберем, что написано в каждой строке. В строке my_name = «Антон» Мы объявляем переменную «my_name» и присваиваем ей строковое значение «Антон». Во-второй строке мы выводим на экран запись «Меня зовут» добавив значение переменной my_name. Операция объединения строк называется конкатенацией.
Поздравляю вы написали вашу первую программу. Она немного сложней, чем программа print(«Hello World») Так как мы коснулись 2х понятий: работа с переменными и конкатенация. В моем аккаунте и группе мы будем разбирать более сложные и интересные программы из ЕГЭ и не только. Подписывайтесь, буду рад знакомству
ПАКПАК

Скорее всего вы согласитесь со мной в том, что язык программирования Python занимает лидирующие позиции в качестве инструмента для изучения программирования. Во всем мире его используют в школах и вузах для обучения будущих программистов. Поэтому, считаю, было бы полезно попробовать применить этот язык для разработки управляющих программ для учебного программируемого контроллера TXT из конструктора FISCHERTECHNIK.
В этой статье я расскажу, как подготовить рабочее место для разработки программ на языке Python для TXT, и затем мы вместе попробуем составить нашу первую программу.
Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты). Сегодня в качестве практики мы попробуем написать простую программу для управления реальным устройством.
Кстати, Python — это интерпретируемый язык программирования. Поэтому для выполнения программ, написанных на нём, требуется специальная программа-интерпретатор. Она называется также как и язык программирования — Python.
Итак, для сегодняшнего занятия нам понадобятся следующие компоненты:
- Интерпретатор Python
- Программный модуль ftrobopy для языка Python
- Редактор текста с подсветкой синтаксиса Notepad++
Устанавливаем интерпретатор Python
- Скачиваем с сайта python.org файл с расширением MSI. На момент написания статьи актуальная версия 2.7.1 5 (2.7.18 — обновление от 26.10.2020)
- Запускаем
- Выбираем папку для установки
После установки добавляем в переменную окружения PATH путь к файлу python.exe. Так будет удобнее при запуске программ. У меня, например, Питон установлен в папку С:\Python27
Устанавливаем модуль ftrobopy
Для работы со встроенными входами и выходами контроллера TXT нам понадобится программный модуль ftrobopy. Автор этого проекта — T orsten Stuehn.
- Скачиваем архив с сайта github
- Распаковываем в любую папку
- Копируем файл ftrobopy.py в папку с модулями Python. У меня эта папка c:\Python27\Lib\
Кстати, в архиве, который вы распаковали, есть несколько примеров работы с этим программным модулем. Рекомендую их внимательно изучить. Также в архиве есть PDF с описанием, но он написан на немецком языке. Для тех, кто не знает немецкий, в тексте учебной программы все комментарии я делаю на русском языке.
Устанавливаем редактор текста Notepad++
Текст программы на языке Python можно набирать в любом текстовом редакторе. Однако наличие подсветки синтаксиса будет большим плюсом. Я, например, использую бесплатный редактор Notepad++.
- Скачиваем файл с сайта notepad-plus-plus.org
- Запускаем
- Выбираем папку для установки. Рекомендую использовать то, что предлагается по умолчанию.
Пример программы на языке Python:
Пример программы на языке Python для контроллера TXT, который управляет лампами светофора.
# -*- coding: utf-8 -*- import time import ftrobopy # ПАКПАК 2018 # Управление сигналами светофора # Подключаемся к контроллеру TXT txt=ftrobopy.ftrobopy('auto') # Создаем переменные для каждого сигнала green=txt.output(1) # Зеленый - выход TXT O1 yellow=txt.output(2) # Желтый - выход TXT O2 red=txt.output(3) # Красный - выход TXT O3 while True : # Красный green.setLevel(0) yellow.setLevel(0) red.setLevel(512) time.sleep(2) # Зеленый green.setLevel(512) yellow.setLevel(0) red.setLevel(0) time.sleep(2) # Зеленый + желтый green.setLevel(512) yellow.setLevel(512) red.setLevel(0) time.sleep(1)
Для проверки выполните следующие действия:
- Сохраните текст программы в файл с подходящим именем и расширением py. Я выбрал PacpacLight.py.
- Подключите контроллер TXT к компьютеру и включите его.
- Откройте командную оболочку CMD, перейдите в папку с исходным кодом программы и наберите команду:
python PacpacLight.py
Сегодня на этом все. Буду рад ответить на ваши вопросы в комментариях.
Пишем графическую программу на Python с tkinter
В работе со студентами и учениками я заметила, что при изучении какого-либо языка программирования большой интерес вызывает работа с графикой. Даже те студенты, которые скучали на заданиях про числа Фибоначчи, и уже казалось бы у них пропадал интерес к изучению языка, активизировались на темах, связанных с графикой.
Поэтому предлагаю потренироваться в написании небольшой графической програмки на Python с использованием tkinter (кроссплатформенная библиотека для разработки графического интерфейса на языке Python).
Код в этой статье написан для Python 3.5.
Задание: написание программы для рисования на холсте произвольного размера кругов разных цветов.
Не сложно, возможно программа «детская», но я думаю, для яркой иллюстрации того, что может tkinter самое оно.
Хочу рассказать сначала о том, как указать цвет. Конечно удобным для компьютера способом. Для этого в tkinter есть специальный инструмент, который можно запустить таким образом:
from tkinter import * window = Tk() colorchooser.askcolor()
Пояснения к коду:

- rom tkinter import * — импорт библиотеки, вернее всех ее методов, на что указывает звездочка (*);
- window = Tk() — создание окна tkinter;
- colorchooser.askcolor() — открывает окно выбора цвета и возвращает кортеж из двух значений: кортеж из трех элементов, интенсивность каждой RGB цвета, и строка. цвет в шестнадцатиричной системе.
Примечание: как сказано в коментариях ниже — звёздочка не все импортирует, надёжнее будет написать
from tkinter import colorchooser
Можно для определения цвета рисования использовать английские название цветов. Здесь хочу заметить, что не все они поддерживаются. Тут говорится, что без проблем вы можете использовать цвета «white», «black», «red», «green», «blue», «cyan», «yellow», «magenta». Но я все таки поэкспериментировала, и вы увидите дальше, что из этого вышло.
Для того, чтобы рисовать в Python необходимо создать холст. Для рисования используется система координат х и у, где точка (0, 0) находится в верхнем левом углу.
В общем хватит вступлений — начнем.
from random import * from tkinter import * size = 600 root = Tk() canvas = Canvas(root, width=size, height=size) canvas.pack() diapason = 0
Пояснения к коду:
- from random import * — импорт всех методов модуля random;
- from tkinter import * — это вы уже знаете;
- переменная size понадобится потом;
- root = Tk() — создаем окно;
- canvas = Canvas(root, width=size, height=size) — создаем холст, используя значение переменной size (вот она и понадобилась);
- canvas.pack() — указание расположить холст внутри окна;
- переменная diapason понадобится потом для использования в условии цикла.
while diapason < 1000: colors = choice(['aqua', 'blue', 'fuchsia', 'green', 'maroon', 'orange', 'pink', 'purple', 'red','yellow', 'violet', 'indigo', 'chartreuse', 'lime', ''#f55c4b'']) x0 = randint(0, size) y0 = randint(0, size) d = randint(0, size/5) canvas.create_oval(x0, y0, x0+d, y0+d, fill=colors) root.update() diapason += 1
colors = choice(['aqua', 'blue', 'fuchsia', 'green', 'maroon', 'orange', 'pink', 'purple', 'red','yellow', 'violet', 'indigo', 'chartreuse', 'lime', ''#f55c4b''])
Создаем список для якобы случайного выбора цвета кругов. Заметьте, что один из цветов написан в формате ''#f55c4b'' — код цвета в шестнадцатиричной системе.
Здесь хочу остановиться на выборе цвета. Мне хотелось добавить как можно больше вариантов выбора цвета, поэтому я воспользовалась таблицей названий цветов в английском языке. Но вскоре поняла, что многие английские названия не поддерживаются — программа переставала работать. Поэтому определение цвета в шестнадцатиричной системе будет для этих целей более подходящим вариантом.
x0 = randint(0, size) и y0 = randint(0, size) — случайный выбор координат х и у в рамках холста размером size.
d randint(0, size/5) — произвольный выбор размера круга, ограниченный size/5.
canvas.create_oval(x0, y0, x0+d, y0+d, fill=colors) — собственно говоря рисуем круги, в точках с координатами x0 и y0, размерами по вертикали и горизонтали x0+d и y0+d, заливкой цветом, который выбирается случайным образом из списка colors.
root.update() — update() — обрабатывает все задачи, стоящие в очереди. Обычно эта функция используется во время «тяжёлых» расчётов, когда необходимо чтобы приложение оставалось отзывчивым на действия пользователя.
Без этого в итоге отобразятся круги, но процесс их появления будет вам не виден. А именно это придает шарм этой програмке.
diapason += 1 — шаг цикла, счетчик.
В результате получается такая картинка:

Мне не понравилось, что справа и вверху какие-то пустые места образовываются, поэтому я немного изменила условие цикла while diapason < 2000 или 3000. Так холст получился более заполненным.
Также можно сделать цикл бесконечным:
while True: colors = choicecolors = choice(['aqua', 'blue', 'fuchsia', 'green', 'maroon', 'orange', 'pink', 'purple', 'red','yellow', 'violet', 'indigo', 'chartreuse', 'lime']) x0 = randint(0, size) y0 = randint(0, size) d = randint(0, size/5) canvas.create_oval(x0, y0, x0+d, y0+d, fill=colors ) root.update()
Я думаю, можно было бы еще поиграться со скоростью рисования кругов или их движением по холсту. Можно было увеличить варианты выбора цветов. Поставить условие для остановки бесконечного цикла, например по нажатию пробела. Это все задания для будущих программ.
Студенты еще спросили, а можно ли запускать это как заставку на рабочем столе Windows? Пока не нашла как это можно было бы сделать.
