Мы пишем настольное приложение на Python с использованием Tkinter (видео)

Мы пишем настольное приложение на Python с использованием Tkinter Важно знать

Что такое GUI и как с ним работать в Python

GUI (Graphical User Interface) — это графический пользовательский интерфейс, оболочка программы, с которой мы взаимодействуем с помощью клавиатуры и мыши. В современных операционных системах почти все программы работают с графическим интерфейсом, а с GUI мы сталкиваемся каждый день: читаем статьи в браузере, вводим текст в редакторе или играем в игры.

Противоположностью графическому интерфейсу является командная строка, которая позволяет вам управлять приложением с помощью текстовых команд. Такой интерфейс реализован в терминале macOS и командной строке Windows.

В Python есть четыре библиотеки для работы с графическим интерфейсом:

  • Ткинтер;
  • Киви;
  • Питон QT
  • wxPython.

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

Знакомимся с Tkinter

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

Что тут происходит:

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

Ключевыми объектами в работе с Tkinter являются виджеты. Это аналоги HTML-тегов, позволяющие создавать интерактивные и неинтерактивные элементы, например метки или кнопки. Всего их 18, но наиболее часто используются следующие:

  • Кнопка — кнопки;
  • Холст — «холст», на котором рисуются графические формы;
  • Entry — виджет для создания полей ввода;
  • Label — контейнер для размещения текста или изображения;
  • Меню — виджет для создания пунктов меню.

Самый простой способ понять работу с виджетами — это попрактиковаться. Но прежде чем мы начнем, давайте обсудим идею нашего первого настольного приложения.

Как это сделано

Теперь мы поговорим о самых важных файлах, используемых в любом приложении, написанном с помощью Electron. Начнем с файла package.json, который содержит различную информацию о проекте. Например, версия, список зависимостей npm и другая не менее важная информация.

package.json

{ «name»: «electron-app», «version»: «1.0.0», «description»: «», «main»: «main.js», «dependencies»: { «pretty-bytes»: » ^2.0.1″ }, «devDependencies»: { «предварительно собранный электрон»: «^0.35.2» }, «сценарии»: { «старт»: «electron main.js» }, «автор»: «», «лицензия»: «ISC» }

Если вы уже работали с Node.js, то уже имеете представление о том, как все это работает. Важно отметить команду запуска npm, которая запускает приложение. Когда мы вызываем эту команду в консоли, мы говорим электрону запустить файл main.js. Этот файл содержит небольшой скрипт, открывающий окно приложения, определяющий некоторые параметры и обработчики событий.

main.js

var приложение = требуется (‘приложение’); // Модуль управления приложениями var BrowserWindow = require(‘окно браузера’); // Модуль для создания окна браузера. // Сохраняем глобальную ссылку на объект Window, если этого не сделать // окно автоматически закроется, как только запустится сборщик мусора JS var mainWindow = null; // Выйти после закрытия всех окон app.on(‘window-all-closed’, function() { // В OS X приложения и их меню обычно // остаются активными до тех пор, пока пользователь явно не выйдет // с Cmd + Q if (process.platform != ‘darwin’) { app.quit(); } }); // Этот метод вызывается, когда Electron закончил // инициализацию и готов создать окно браузера app.on(‘ready’, function() { // Создать окно браузера mainWindow = new BrowserWindow({width: 900, height : 600 }); // и загрузим index.html в приложение mainWindow.loadURL(‘file://’ + __dirname + ‘/index.html’); // Генерируется при закрытии окна mainWindow.on(‘closed ‘, function() { // Сбрасываем объект окна, обычно нужен при хранении окон // в массиве, это необходимо, если в вашем приложении много окон, // в этом случае следует удалить соответствующий элемент mainWindow = null; }); });

Давайте посмотрим, что мы делаем в готовом методе. Во-первых, мы определяем окно браузера и устанавливаем его начальный размер. Затем мы загружаем в него файл index.html, который работает точно так же, как если бы мы открыли его в браузере.

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

index.html

Здесь у нас есть html код, ссылки на необходимые стили, js библиотеки и скрипты. Заметили, что jQuery включен странным образом? См этот вопрос, чтобы узнать, почему соединение происходит таким образом.

Наконец, собственно код JavaScript нашего приложения. В нем мы подключаемся к RSS-ленте, получаем последние статьи и отображаем их. Если мы попытаемся выполнить такую ​​операцию в среде браузера, ничего не получится. Канал находится на другом домене и с него запрещено получать данные. Но в Electron такого ограничения нет, мы можем получить нужную информацию с помощью AJAX-запроса.

$(function(){ // Отображение информации о компьютере с помощью модуля узла os var os = require(‘os’); var prettyBytes = require(‘pretty-bytes’); $(‘.stats’).append (‘Количество ядер процессора: ‘ + os.cpus() длина + ‘</span>'); $('.stats').append('Свободная память: ‘ + симпатичные байты (os.freemem())+ ‘</span>'); // Библиотека UI-компонентов Электрон. Нам это понадобится позже var shell = require('shell'); // Получить последние сообщения из Tutorialzine var ul = $('.flipster ul'); // Electron не применяет политики безопасности, // поэтому мы можем отправлять ajax-запросы на другие сайты. См. Tutorialzine $.get('http://feeds.feedburner.com/Tutorialzine', function(response){ var rss = $(response); // Найти все статьи в RSS-канале: rss.find(' item').each(function(){ var item = $(this); var content = item.find('encoded').html().split('')0+»; var urlRegex = / (http |ftp|https)://w-_+(.w-_+)+(w-.,@?^=%&:/ ~ +#*w-@?^=%&/~+#)?/g;//Получить первое изображение из статьи var imageSource = content.match(urlRegex) ;/ / Создать li для каждой статьи и добавить ее в неупорядоченный список var li = $(»); li.find(‘a’) .attr(‘href’, item.find(‘link’).text ()) .text (item.find(«title»).text()); li.find(‘img’).attr(‘src’, imageSource); li.appendTo(ul); }); // Инициализировать флипстер plugin.$ (‘.flipster’).flipster({ style: ‘carousel’ }); // При нажатии на статью открывается страница в браузере по умолчанию. // В противном случае открывается в окне Electron. $ (‘ .flipster’) on(‘click’, ‘a’, function (e) { e.preventDefault(); // Открыть URL в браузере по умолчанию hun ll.ope nExternal(e.target.href); }); }); });

Одна интересная вещь в приведенном выше коде заключается в том, что в одном и том же файле вы можете одновременно использовать:

  • Библиотеки JavaScript — jQuery и jQuery Flipster для создания карусели.
  • Собственные модули Electron представляют собой оболочку, предоставляющую API для настольных задач. В нашем случае вы открываете URL-адрес в браузере по умолчанию.
  • Модули Node.js — модуль ОС для доступа к системной информации, Pretty Bytes для форматирования.

С вашей помощью наше приложение готово к использованию!

Функциональность, быстродействие

Веб-приложение полностью зависит от браузера и его технологий. Поэтому есть ряд ограничений, например в доступе к железу вашего устройства. Это и некоторые другие ограничения невозможно обойти (по крайней мере, пока). Но ряд задач можно решить по принципу «что нельзя переписать, то можно надстроить или расширить». Редакторы документов, изображений, аудио, видео, 3D-графики; системы управления проектами; файловое хранилище; конструкторы без кода — успешно работают в браузерах. Инструменты для быстрой интеграции сервисов, а также интерфейсные библиотеки еще больше расширяют существующие возможности.

Десктоп позволяет реализовать буквально все функции — в этом он явно превосходит веб. Да и вообще, полноценного онлайн-аналога Photoshop или Sony Vegas еще никто не разработал. Системные инструменты, безусловно, являются областью разработки настольных компьютеров. Как и программы, которые должны долго работать в фоне — например, чаты или торрент-клиенты — работать с ними через браузер будет просто неудобно. Также такое ПО чаще используется под конкретные проекты, с нестандартными интерфейсами или функциями. Поэтому веб-разработка пока не представляет опасности для десктопных программистов — эти технологии будут развиваться параллельно, просто под разные задачи.

Что касается скорости работы, то здесь не все так однозначно, как может показаться. Несмотря на то, что браузерный клиент постоянно общается с сервером, его производительность во многом будет зависеть от того, насколько качественно он спроектирован, «чистоты» кода, возможностей оборудования и стабильности канала связи. Разница в производительности, очевидная при тестировании, часто незаметна для пользователей.

Безопасность

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

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

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

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

Запускаем Python и импортируем Tkinter

Лучше всего писать код Python в специальной среде IDE, такой как PyCharm или Visual Studio Code. Они подсвечивают синтаксис и предлагают продолжение кода — это упрощает работу программиста. Мы написали весь код в этой статье в Visual Studio Code.

Библиотека Tkinter предустановлена ​​вместе с Python. Поэтому его нужно только импортировать:

импортировать tkinter как tk

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

09173523072022_b9ead331dd32dc217902662bedebf0771737fa47.PNG

Надежность

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

Десктоп работает автономно, поэтому самое главное — это качество кода и стабильность железа, на котором этот код работает. Но если связь с сервером необходима, возникают те же проблемы, что и у «конкурента».

Windows Desktop: общеупотребительное значение

однако сортировка компьютеров по конструкции сегодня несколько не актуальна. Например, в системах Windows, Linux или Mac OS X это обозначение (Computer Desktop) точно соответствует «Рабочему столу», где расположены основные элементы управления графическим интерфейсом. Это больше соответствует «поверхности стола».

окна рабочего стола

Рабочий стол Mac, что «рабочие столы» других операционных систем, очень похожи друг на друга. Такое впечатление, что объектно-ориентированное программирование, используемое для создания всех операционных систем, без этого не может обойтись. Поэтому рассмотрим сам термин в его нынешнем толковании именно с этой точки зрения.

Создаём виджет Frame для контроля за расположением элементов

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

  • pack используется, когда мы работаем с контейнерами для элементов. Позволяет размещать кнопки, метки или другие элементы внутри контейнеров.
  • место — позволяет размещать предметы, указывая точные координаты.
  • grid — размещает элементы по ячейкам условной сетки, разделяющей окно программы.

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

Обозначим отступы по вертикали и горизонтали в 10 пикселей для элементов, которые будут размещены внутри рамки:

frame = Frame(window, #Обязательный параметр, указывающий размещаемое окно Frame.padx = 10, #Установить отступ по горизонтали pady = 10#Установить отступ по вертикали.) frame.pack(expand=True)#Не забудьте поместите виджет в окно. Здесь используется пакетный метод. С помощью свойства expand=True мы указываем, что фрейм заполняет весь созданный для него контейнер.

Возможности доступа к параметрам и программам

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

Предположим, у пользователя есть ссылка (ярлык) на программу на «Рабочем столе», но при запуске система постоянно выдает сообщение о том, что для запуска приложения требуются права администратора. Нет ничего проще, чем настроить апплет на постоянную работу только с правами администратора.

стол что это

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

окна рабочего стола

Попутно стоит отметить еще один довольно интересный сеттинг. Дело в том, что некоторые программы не ориентированы на последние модификации операционных систем и не могут работать в их среде. Что делать в ситуации, когда программа установлена, но, мягко говоря, не работает? Здесь снова на помощь приходит раздел свойств, где можно настроить запуск приложения в режиме совместимости с более ранней версией операционной системы. И для этого совершенно не обязательно заходить ни в какие дополнительные настройки системы.

Публикация / развертывание

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

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

Настройки «Рабочего стола»

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

рабочий стол Mac

Во-вторых, именно через меню ПКМ в свободной области «Рабочего стола» в большинстве случаев можно быстро получить доступ к основным параметрам экрана и настройкам настройки дизайна.

В-третьих, сразу можно изменить настройки графического адаптера (опять же из контекстного меню).

стационарный компьютер

В-четвертых, через ПКМ на «Рабочем столе» (по крайней мере, в Windows) можно воспользоваться созданием файлов/документов/папок основных типов, зарегистрированных в операционной системе (офисные документы, контакты, архивы, каталоги и так далее).

Кроссплатформенность

Веб-приложение будет одинаково хорошо работать на любом устройстве, будь то стационарный компьютер, ноутбук, планшет или смартфон — ведь оно практически не зависит от железа или операционной системы. Самое главное — правильный браузер. Как правило, для большинства веб-клиентов подходят Google Chrome, Mozilla Firefox, Apple Safari или браузер Windows (Microsoft Edge/Internet Explorer).

Рабочий стол зависит от операционной системы, процессора, видеокарты и ряда других параметров. Нужно учитывать нюансы каждой среды (в том числе и при «ловле» ошибок), писать код с учетом возможных вариантов, нанимать отдельных разработчиков или даже целые команды для версий для разных операционных систем.

Видео

Поделиться или сохранить к себе:
Ваш гид | NokiaGid.ru