From eee1842421c5e390302084a2f87493c531b37610 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Mon, 3 Aug 2026 22:05:44 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=BA=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20(=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA/=D0=BF=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87)=20+=20=D0=B2=20?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=83=D1=80=D1=81=D0=B0=D1=85=20exe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dokogen.spec | 2 ++ dokogen/ui.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/dokogen.spec b/dokogen.spec index 85ac2f5..5f15ed8 100644 --- a/dokogen.spec +++ b/dokogen.spec @@ -13,6 +13,8 @@ datas = [ ('dokogen/dictionaries', 'dokogen/dictionaries'), # Пустой опросник 152-ФЗ (для «Справка → Пустой опросник») ('dokogen/data', 'dokogen/data'), + # Иконка приложения (для окна программы в exe) + ('dokogen/icon.ico', 'dokogen'), ] # ---------- Словари pymorphy3 (обязательно!) ---------- diff --git a/dokogen/ui.py b/dokogen/ui.py index e11012b..8cff6b0 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -34,6 +34,27 @@ class DokoGenApp: root.title("ДоКоГеНеРаТоР — 152-ФЗ (Персональные данные)") root.geometry("1200x800") root.minsize(900, 600) + self._set_app_icon() + + def _set_app_icon(self): + """Устанавливает иконку приложения на окно (заголовок, панель задач). + + Работает и из исходников, и из exe (frozen): + - исходники: dokogen/icon.ico рядом с модулем + - exe: dokogen/icon.ico из _MEIPASS (ресурсы PyInstaller) + """ + try: + if getattr(sys, 'frozen', False): + base = getattr(sys, '_MEIPASS', os.path.dirname(sys.executable)) + ico = os.path.join(base, 'dokogen', 'icon.ico') + if not os.path.exists(ico): + ico = os.path.join(os.path.dirname(sys.executable), 'icon.ico') + else: + ico = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'icon.ico') + if os.path.exists(ico): + self.root.iconbitmap(ico) + except Exception: + pass self.model = Company() self.current_file: Optional[str] = None