Создание настольных Python приложений с графическим интерфейсом пользователя - Тимур Машнин
Шрифт:
Интервал:
Закладка:
Лицензия LGPL позволяет распространять код без необходимости делиться своим исходным кодом.
Это позволяет разрабатывать коммерческие приложения с помощью PySide.
Однако лицензия GPL не позволяет вам скрывать исходный код.
Короче говоря, если вы хотите разрабатывать и распространять коммерческие программы на PyQt, вам следует приобрести коммерческую лицензию на Qt.
Вы все равно можете продавать программное обеспечение за деньги (без коммерческой лицензии), но вам придется поделиться исходным кодом.
Это неприемлемо для большинства коммерческих программ.
Сравнение PyQt и PySide показывает, что обе библиотеки примерно равны.
За исключением нескольких различий в синтаксисе в том, как происходит импорт и запуск, синтаксис обеих библиотек абсолютно одинаков.
И они используют одни и те же виджеты — виджеты Qt.
Теперь, как создать исполняемую программу PySide.
Для этого мы используем PyInstaller, инструмент который позволяет заморозить приложение Python в автономном исполняемом файле.
Этот установщик поддерживает Linux, macOS, Windows и другие операционные системы, а также совместим со сторонними модулями Python, такими как PySide6.
Поэтому сначала установим PyInstaller с помощью pip.
И в коде используем функцию main для запуска приложения.
Далее в окне терминала наберем pyinstaller
main
py.
Этот процесс создает два каталога: dist / и build /.
Исполняемый файл приложения и необходимые библиотеки помещаются в каталог dist.
Чтобы запустить приложение, перейдите в dist и запустите программу.
В Windows PyInstaller имеет возможность создать сборку из одного файла, то есть один EXE-файл, который содержит весь ваш код, библиотеки и файлы данных в одном исполняемом файле.
Чтобы указать однофайловую сборку, укажите в командной строке флаг — onefile.
Tkinter
Tkinter — это обертка Python библиотеки Tk GUI, которая поставляется вместе с Python.
Tkinter — это стандартная библиотека графического интерфейса для Python.
И Tkinter — это интерфейс Python для Tk.
Tkinter — это аббревиатура от «Tk interface».
Tk был разработан Джоном Остерхаутом как расширение графического интерфейса для языка сценариев Tcl.
И Tk был очень популярен в 1990-х годах, так как его легче было изучать и использовать, чем другие наборы инструментов.
Поэтому неудивительно, что многие программисты захотели использовать Tk независимо от Tcl.
Вот почему были разработаны обертки для множества других языков программирования, включая Perl, Ada, Python, Ruby и Common Lisp.
Создание приложения с графическим интерфейсом пользователя с использованием Tkinter — это несложная задача.
Все, что вам нужно сделать, это выполнить следующие шаги -
Импортировать модуль Tkinter.
Создать главное окно приложения GUI.
Добавить один или несколько виджетов в приложение с графическим интерфейсом.
Войти в основной цикл событий, чтобы обрабатывать каждое событие, инициированное пользователем.
Чтобы инициализировать tkinter, мы должны создать корневой виджет Tk, который представляет собой окно со строкой заголовка.
Корневой виджет должен быть создан перед любыми другими виджетами, и может быть только один корневой виджет.
Метод pack сообщает Tk, что размер окна подгоняется под заданный текст.
И окно не появится, пока мы не войдем в цикл событий Tkinter mainloop.
И наш скрипт останется в цикле событий, пока мы не закроем окно.
Теперь, как создать исполняемый файл для приложения Tkinter.
Для начала, установим инструмент pyinstaller.
Затем в окне терминала наберем команду pyinstaller — onefile — windowed main.py
В результате в папке dist будет создан один исполняемый файл.
Для создания графического интерфейса пользователя Tk предоставляет виджеты, окна верхнего уровня и три менеджера геометрии.
И мы начнем знакомство с Tk с одного из самых простых виджетов — с метки.
Метка — это виджет Tkinter, который используется для отображения текста или изображения.
И метка — это виджет, который пользователь просто просматривает, но не взаимодействует с ним.
Посмотрите на строку кода, которая содержит виджет Label.
Здесь первый параметр — это имя родительского окна, в нашем случае «root».
Так как наш виджет Label является потомком корневого виджета.
Параметр text или textvariable определяет текст, который будет отображаться.
Параметр relief задает внешний вид декоративной рамки вокруг метки. По умолчанию — FLAT.
Некоторые виджеты (например, виджеты ввода текста, переключатели и т. д.) могут быть напрямую связаны с переменными приложения с помощью специальных параметров: variable, textvariable, onvalue, offvalue, и value.
И это связывание работает в обоих направлениях: если переменная изменяется по какой-либо причине, виджет, к которому она подключена, будет обновлен, чтобы отразить новое значение.
Эти управляющие переменные Tkinter используются как обычные переменные Python для хранения определенных значений.
Но при этом невозможно передать обычную переменную виджету с помощью параметра variable или textvariable.
Единственные типы переменных, для которых это работает, — это переменные, которые являются подклассами класса Variable, определенного в модуле Tkinter.
Это переменные StringVar, IntVar, DoubleVar, BooleanVar.
Чтобы прочитать текущее значение такой переменной, можно вызвать метод get.
Значение такой переменной можно изменить с помощью метода set.
Виджет Message можно использовать для отображения коротких текстовых сообщений.
И виджет сообщения аналогичен по своим функциям виджету Label, но более гибок в отображении текста, например можно изменить шрифт, в то время как виджет метки может отображать текст только одним шрифтом. Хотя невозможно использовать для текста более одного шрифта.
Если вам нужно отображать текст несколькими шрифтами, можно использовать виджет Text.
Здесь мы используем метод config чтобы установить фон сообщения и шрифт сообщения.
Виджет Button используется для добавления кнопок в приложение Python.
Эти кнопки могут отображать текст или изображения, которые передают назначение кнопок.
И вы можете прикрепить функцию или метод к кнопке, который будет вызываться автоматически при нажатии кнопки.
Здесь мы создаем фрейм как родительский виджет для двух кнопок.
Первая кнопка с красной надписью QUIT, при нажатии на которую окно закрывается — это встроенная команда quit, прикрепленная к кнопке.
Ко второй кнопке прикреплен метод write_slogan, который печатает в вывод текст.
Радиокнопка представляет собой элемент графического пользовательского интерфейса Tkinter, который позволяет пользователю выбрать одну опцию из предопределенного набора опций.
Радиокнопки могут содержать текст или изображения.
И кнопка может отображать текст только одним