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