Pull to refresh

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

Level of difficultyMedium

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.