Как стать автором
Обновить

Как создать установщик, используя tkinter (python 3)?

Уровень сложностиСредний

В этом коде мы создали приложение-установщик с интерфейсом на 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. Пользователь видит прогресс установки и получает уведомление после её завершения 📢.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.