Как-то пришлось написать небольшое desktop-приложение. В качестве языка программирования для разработки был выбран python, поскольку для решения моей задачи он подходил идеально. В стандартную библиотеку Python уже входит библиотека tkinter, позволяющая создавать GUI.
Но проблема tkinter в том, что данной библиотеке посвящено мало внимания, и найти в интернете курс, книгу или FAQ по ней довольно-таки сложно. Поэтому было решено использовать более мощную, современную и функциональную библиотеку Qt, которая имеет привязки к языку программирования python в виде библиотеки PyQT5. Более подробно про PyQT можете почитать здесь. В качестве примера я буду использовать код:
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIcon class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 220) self.setWindowTitle(‘Icon’) self.setWindowIcon(QIcon(‘web.png’)) self.show() if __name__ == ‘__main__’: app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Если вы более-менее опытный разработчик, то понимаете, что без интерпретатора код на python не запустить. А хотелось бы дать возможность каждому пользователю использовать программу. Вот здесь к нам на помощь и приходят специальные библиотеки позволяющие собирать проекты в .exe, которые можно потом без проблем запустить, как обычное приложение.
Какие вещи реально пишут на Python?
Существует большое количество библиотек, позволяющих это сделать, среди которых самые популярные: cx_Freeze, py2exe, nuitka, PyInstaller и др. Про каждую написано довольно много. Но надо сказать, что многие из этих решений позволяют запускать код только на компьютере, с предустановленным интерпретатором и pyqt5.
Не думаю, что пользователь будет заморачиваться и ставить себе дополнительные пакеты и программы. Надеюсь, вы понимаете, что запуск программы на dev-среде и у пользователя это не одно и тоже. Также нужно отметить, что у каждого решения были свои проблемы: один не запускался, другой собирал то, что не смог потом запустить, третий вообще отказывался что-либо делать.
После долгих танцев с бубном и активным гуглением, мне все же удалось собрать проект с помощью pyinstaller, в полностью работоспособное приложение.
Немного о Pyinstaller
Pyinstaller собирает python-приложение и все зависимости в один пакет. Пользователь может запускать приложение без установки интерпретатора python или каких-либо модулей. Pyinstaller поддерживает python 2.7 и python 3.3+ и такие библиотеки как: numpy, PyQt, Django, wxPython и другие.
Pyinstaller тестировался на Windows, Mac OS X и Linux. Как бы там ни было, это не кросс-платформенный компилятор: чтобы сделать приложение под Windows, делай это на Windows; Чтобы сделать приложение под Linux, делай это на Linux и т.д.
PyInstaller успешно используется с AIX, Solaris и FreeBSD, но тестирование не проводилось.
Учим Python за 1 час! #От Профессионала
Подробнее о PyInstaller можно почитать здесь: документация.
К тому же после сборки приложение весило всего около 15 мб. Это к слову и является преимуществом pyinstaller, поскольку он не собирает все подряд, а только необходимое. Аналогичные же библиотеки выдавали результат за 200-300 мб.
Приступаем к сборке
Прежде чем приступить к сборке мы должны установить необходимые библиотеки, а именно pywin32 и собственно pyinstaller:
pip install pypiwin32 pip install pyinstaller
Чтобы убедится, что все нормально установилось, вводим команду:
pyinstaller —version
должна высветиться версия pyinstaller. Если все правильно установилось, идем дальше.
В папке с проектом запускаем cmd и набираем:
pyinstaller myscript.py
Собственно это и есть простейшая команда, которая соберет наш проект.
Синтаксис команды pyinstaller таков:
pyinstaller [options] script [script . ] | specfile
Наиболее часто используемые опции:
—onefile — сборка в один файл, т.е. файлы .dll не пишутся.
—windowed -при запуске приложения, будет появляться консоль.
—noconsole — при запуске приложения, консоль появляться не будет.
—icon=app.ico — добавляем иконку в окно.
—paths — возможность вручную прописать путь к необходимым файлам, если pyinstaller
не может их найти(например: —paths D:python35Libsite-packagesPyQt5Qtbin)
PyInstaller анализирует файл myscript.py и делает следующее:
- Пишет файл myscript.spec в той же папке, где находится скрипт.
- Создает папку build в той же папке, где находится скрипт.
- Записывает некоторые логи и рабочие файлы в папку build.
- Создает папку dist в той же папке, где находится скрипт.
- Пишет исполняемый файл в папку dist.
В итоге наша команда будет выглядеть так:
pyinstaller —onefile —icon=name.ico —noconsole myscript.py
После работы программы вы найдете две папки: dist и build. Собственно в папке dist и находится наше приложение. Впоследствии папку build можно спокойно удалить, она не влияет на работоспособность приложения.
Спасибо за внимание. Надеюсь статья была вам полезна.
Источник: habr.com
Примеры программ Python
Примеры
Автор Иван Душенко На чтение 9 мин Просмотров 45.5к. Опубликовано 26.08.2021
Введение
В данном уроке мы приведём несколько примеров небольших программ на Python. Общая рекомендация к изучению любого языка: практикуйтесь как можно больше. Чтобы достичь хоть какого-то уровня профессионализма в программировании, не достаточно только изучать теорию. Пишите код. Желательно, каждый день, хотя бы по чуть-чуть.
Это важно. Ваши руки должны привыкнуть к синтаксису, а мозги – к решению стандартных задач программирования.
Примеры простых программ
Замена значений переменных местами
На большинстве других языков эта задача была бы решена следующим образом:
var_1 = 15 var_2 = 67 print(‘var_1:’, var_1, ‘var_2:’, var_2) var_temp = var_1 var_1 = var_2 var_2 = var_temp print(‘var_1:’, var_1, ‘var_2:’, var_2) # Вывод: var_1: 15 var_2: 67 var_1: 67 var_2: 15
Но Пайтон творит магию:
Источник: pythoninfo.ru
Пример программы на python для windows
Что мы изучим
- Как создавать базы данных, выполнять CRUD операции и запросы на языке SQL.
- Как обрабатывать события в элементах Listbox.
- Как назначить действия основным кнопкам программы и кнопке закрытия окна.
Скрипт для создания словаря
Словарь представляет собой базу данных SQLite, которая поставляется с Python по умолчанию. Для создания новой базы не придется устанавливать никакие дополнительные модули. Однако при желании можно установить набор дополнительных инструментов для работы с SQLite и один из визуальных браузеров-редакторов:
Структура таблицы словаря dictionary задается в sql_create_dictionary_table скрипта create_new_db.py:
- id – порядковый номер записи (целое число);
- word – иностранное слово (текстовое поле);
- meaning – значение слова на русском языке (текстовое поле).
При желании в этом описании можно задать поле для фонетической транскрипции. Для создания базы в определенной директории надо сначала убедиться, что необходимый путь к папке уже имеется на диске. Если нужную директорию не создать заранее, но указать путь к ней в коде, то выполнение скрипта завершится так:
SQL-запросы и команды
Первый запрос, который нам потребуется для извлечения из базы всех слов, выглядит так:
Для удаления слова необходимо выделить соответствующую строку. Слово извлекается из выделенной строки:
Это нужно для того, чтобы при сохранении записи не сохранилось пустое поле вместо предыдущего слова или значения, если одно из них не нужно было редактировать и пользователь не ввел слово (значение) вручную. А еще это упрощает исправление опечаток.
Фактическое обновление существующей записи производится командой со следующими параметрами:
Функция callback_left отслеживает клики по английским словам в левом элементе Listbox. Когда пользователь кликает по слову, функция посылает запрос в базу:
Действие для кнопки х, которая по умолчанию просто закрывает окно и останавливает программу, можно переопределить таким образом, чтобы выводилось окно подтверждения:
Для этого нужно задать новый протокол:
self.wind.protocol(«WM_DELETE_WINDOW», self.on_exit)
И добавить функцию:
def on_exit(self): if messagebox.askyesno(«Выйти», «Закрыть программу?»): self.wind.destroy()
Это полный код модуля word_match.py для запоминания и проверки значений слов:
from tkinter import ttk from tkinter import * import random, os import sqlite3 class Match: db_name = ‘dictionary.db’ def __init__(self, window): self.wind = window self.wind.title(‘Учим слова’) self.eng, self.trans = str(), str() self.message = Label(text = », fg = ‘red’) self.message.grid(row = 1, column = 0, columnspan = 2, sticky = W + E) # правая и левая колонки self.left = Listbox(height = 12, exportselection=False, activestyle=’none’) self.left.grid(row = 2, column = 0) self.right = Listbox(height = 12, activestyle=’none’) self.right.grid(row = 2, column = 1) self.right.bind(«>», self.callback_right) self.left.bind(«>», self.callback_left) # назначение команд кнопкам программы и х-кнопке окна ttk.Button(text=»Начать сначала», command=self.restart_program).grid(row = 4, column = 1, sticky = W + E) ttk.Button(text=»Редактировать», command=self.run_edit).grid(row = 4, column = 0, sticky = W + E) self.wind.protocol(«WM_DELETE_WINDOW», self.on_exit) # заполняем колонки словами self.get_words() # закрытие программы по клику на кнопке х def on_exit(self): if messagebox.askyesno(«Выйти», «Закрыть программу?»): self.wind.destroy() # подключение к базе и передача запроса def run_query(self, query, parameters = ()): with sqlite3.connect(self.db_name) as conn: cursor = conn.cursor() result = cursor.execute(query, parameters) conn.commit() return result # запрос на извлечение всех существующих записей из базы в алфавитном порядке def get_words(self): query = ‘SELECT * FROM dictionary ORDER BY word DESC’ db_rows = self.run_query(query) # формирование словаря из перемешанных в случайном порядке слов и их значений lst_left, lst_right = [], [] for row in db_rows: lst_left.append(row[1]) lst_right.append(row[2]) random.shuffle(lst_left) random.shuffle(lst_right) dic = dict(zip(lst_left, lst_right)) # заполнение правой и левой колонок for k, v in dic.items(): self.left.insert(END, k) self.right.insert(END, v) # обработка клика по словам в левой колонке def callback_left(self, event): self.message[‘text’] = » if not event.widget.curselection(): return # извлечение из базы значения выделенного слова w = event.widget idx = int(w.curselection()[0]) self.eng = w.get(idx) with sqlite3.connect(self.db_name) as conn: cursor = conn.cursor() sqlite_select_query = ‘SELECT * from dictionary WHERE word = ?’ cursor.execute(sqlite_select_query, (self.eng,)) record = cursor.fetchone() self.trans = record[2] # обработка клика в правой колонке def callback_right(self, event1): self.message[‘text’] = » if not event1.widget.curselection(): return w = event1.widget idx = int(w.curselection()[0]) click = w.get(idx) # если выбранное слово является правильным переводом, удаляем и оригинал, и значение if click == self.trans: self.right.delete(ANCHOR) self.left.delete(ANCHOR) # сообщаем о неверном значении else: self.message[‘text’] = ‘Неправильно’ self.right.selection_clear(0, END) # загружаем окно и скрипт редактирования словаря def run_edit(self): os.system(‘edit_dictionary.py’) # перезапуск программы def restart_program(self): self.message[‘text’] = » self.left.delete(0, END) self.right.delete(0, END) self.get_words() if __name__ == ‘__main__’: window = Tk() window.geometry(‘250×245+350+200’) application = Match(window) window.mainloop()
Готовый проект доступен в репозитории .
Материалы по теме
- Как подружить Python и базы данных SQL. Подробное руководство
- SQL за 20 минут
- Руководство по SQL для начинающих. Часть 1: создание базы данных, таблиц и установка связей между таблицами
Источник: proglib.io