
В этом коде мы создали приложение-установщик с интерфейсом на Python с помощью библиотеки tkinter. Ниже приведен полный разбор каждой части кода.
p.s. Эта статья объясняет вам, как использовать пути к файлу для установки приложения, но это можно будет выполнить если, файл уже будет лежать в пути, но скоро выпущу гайд, как вам скачивать приложение через БД. Также прошу обратить внимание, что программа не работает корректно, т. к. она в разработке, в будущем буду развивать.
Импорты 📦:
import tkinter as tk
from tkinter import messagebox, ttk
import subprocess
import threading
import time
import os
import pythoncom
import pywintypes
tkinter и его компоненты (messagebox, tk) используются для создания графического интерфейса пользователя (GUI) 🖥️.
subprocess позволяет запускать другие программы 🔄.
threading позволяет выполнять установки в отдельном потоке, чтобы не блокировать основной GUI ⏳.
time используется для создания пауз в процессе установки ⏲️.
os предоставляет функции для взаимодействия с файловой системой 📁.
class InstallerApp:
def __init__(self, root):
Мы создаем класс InstallerApp, который инициализирует основное окно приложения 🌟.
Настройка интерфейса 🎨:
self.root.title("Установщик")
self.root.geometry("400x300")
self.root.configure(bg="#f5f5f5")
self.file_path = r"YOUR FILE PATH"
self.shortcut_path = os.path.join(os.path.expanduser("~"), "Desktop", "main.lnk")
Здесь устанавливается заголовок, размеры и цвет фона 🎨. Также указывается путь к исполняемому файлу и к месту, где будет создан ярлык (на рабочем столе) 🖥️.
self.style = ttk.Style(self.root)
self.style.configure("TButton",
font=("Arial", 10),
padding=10,
background="#4CAF50",
foreground="white")
self.style.map("TButton",
foreground=[("active", "yellow")],
background=[("active", "#45A049")])
Конфигурация стиля кнопок: определяем шрифт, цвет фона и текста для состояния "активно" 🎈.
Создание элементов интерфейса 🔘:
self.label = tk.Label(root, text="Нажмите кнопку для установки:", font=("Arial", 14), bg="#f5f5f5")
self.label.pack(pady=15)
self.create_install_button("Установить main.exe", self.file_path)
self.back_button = tk.Button(root, text="Назад", command=self.return_to_menu)
self.back_button.pack(side=tk.LEFT, padx=15, pady=20)
self.minimize_button = tk.Button(root, text="Свернуть", command=self.minimize_window)
self.minimize_button.pack(side=tk.RIGHT, padx=15, pady=20)
Метки и кнопки создаются и помещаются в окно 🪟. Кнопка установки запускает процесс установки, а кнопки "Назад" и "Свернуть" управляют взаимодействием с окном 🔙🔽.
Метод для создания кнопки установки 🔧:
self.label = tk.Label(root, text="Нажмите кнопку для установки:", font=("Arial", 14), bg="#f5f5f5")
self.label.pack(pady=15)
self.create_install_button("Установить main.exe", self.file_path)
self.back_button = tk.Button(root, text="Назад", command=self.return_to_menu)
self.back_button.pack(side=tk.LEFT, padx=15, pady=20)
self.minimize_button = tk.Button(root, text="Свернуть", command=self.minimize_window)
self.minimize_button.pack(side=tk.RIGHT, padx=15, pady=20)
Этот метод создает кнопку для запуска установки и связывает её с методом start_installation 🎉.
Метод установки файла 📥
def create_install_button(self, text, file_path):
button = tk.Button(self.root, text=text,
command=lambda: self.start_installation(file_path),
width=30)
button.pack(pady=5)
Проверяет, существует ли указанный файл 📂. Если нет, появляется сообщение об ошибке ❌.
def install_file(self, file_path):
if not os.path.exists(file_path):
messagebox.showerror("Ошибка", f"Файл не найден по пути: {file_path}!")
return
Создается окно прогресса установки. Прогресс отображается с помощью Progressbar, что позволяет пользователю видеть статус установки 🔄.
progress_window = tk.Toplevel(self.root)
for i in range(100):
time.sleep(0.05)
progress_var.set(i + 1)
progress_window.update()
subprocess.call(file_path)
self.create_shortcut()
messagebox.showinfo("Установка завершена", f"Файл установлен: {file_path}!\nЯрлык создан на рабочем столе!")
После установки файла запускается также метод для создания ярлыка, и показывается сообщение о завершении процесса 🎊.
Как это работает 😊
Все вышеперечисленные функции и методы работают вместе, чтобы обеспечить пользователю простой интерфейс установки приложения1. Пользователь видит прогресс установки и получает уведомление после её завершения 📢.