From 58b4402d310ef10ee651765216044299eb836f0b Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 18:01:27 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B0=20?= =?UTF-8?q?=C2=AB=E2=9C=8F=EF=B8=8F=20=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C/=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB-=D0=B2=D0=BE=C2=BB=20=D1=82=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=B4=D0=BB=D1=8F=20=D0=9F=D0=9E/=D0=BE=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D1=83=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - в окнах выбора из словаря инцидентов, угроз, критериев, мер, пользователей, СЗИ и ОКВЭД кнопка больше не показывается - параметр allow_refine: включается только у hw_sw/os_sw/app_sw (там «уточнить модель» и количество действительно нужны) --- dokogen/ui.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/dokogen/ui.py b/dokogen/ui.py index 957f9ee..10dd89f 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -937,7 +937,7 @@ class DokoGenApp: ttk.Button(btn, text="✏️ Редактировать", command=lambda a=attr: self._edit_sw_item(getattr(self, a))).pack(fill=tk.X, pady=1) ttk.Button(btn, text="📚 Из словаря", - command=lambda a=attr, d=dict_name: self._select_sw_from_dict(getattr(self, a), d)).pack(fill=tk.X, pady=1) + command=lambda a=attr, d=dict_name: self._select_sw_from_dict(getattr(self, a), d, allow_refine=True)).pack(fill=tk.X, pady=1) setattr(self, attr, box) sw_frame.columnconfigure(0, weight=1) @@ -1639,15 +1639,19 @@ class DokoGenApp: if item: self.defense_tools_listbox.insert(tk.END, item) - def _select_sw_from_dict(self, listbox, dict_name): - """Выбор позиций из словаря (JSON) — можно несколько.""" + def _select_sw_from_dict(self, listbox, dict_name, allow_refine=False): + """Выбор позиций из словаря (JSON) — можно несколько. + + allow_refine=True — показывать кнопку «✏️ Уточнить модель/кол-во» + (только для ПО/оборудования, где это имеет смысл). + """ import json dict_path = os.path.join(os.path.dirname(__file__), 'dictionaries', dict_name) try: with open(dict_path, 'r', encoding='utf-8') as f: items = json.load(f) title = "Выбор из словаря" - self._select_from_dialog(title, items, listbox) + self._select_from_dialog(title, items, listbox, allow_refine=allow_refine) except Exception as e: messagebox.showerror("Ошибка", f"Не удалось загрузить словарь: {e}") @@ -2168,8 +2172,11 @@ class DokoGenApp: listbox.delete(sel[0]) # ==================== ВЫБОР ИЗ СПИСКА (словари) ==================== - def _select_from_dialog(self, title: str, items: list, listbox): - """Открывает окно с чекбоксами для выбора элементов из списка.""" + def _select_from_dialog(self, title: str, items: list, listbox, allow_refine=False): + """Открывает окно с чекбоксами для выбора элементов из списка. + + allow_refine=True — показывать кнопку «✏️ Уточнить модель/кол-во». + """ dialog = tk.Toplevel(self.root) dialog.title(title) dialog.geometry("720x680") @@ -2253,8 +2260,9 @@ class DokoGenApp: vars[new_text] = var items_map[new_text] = (var, cb) - ttk.Button(btn_frame, text="✏️ Уточнить модель/кол-во", - command=_refine_selected).pack(side=tk.LEFT, padx=2) + if allow_refine: + ttk.Button(btn_frame, text="✏️ Уточнить модель/кол-во", + command=_refine_selected).pack(side=tk.LEFT, padx=2) ttk.Button(btn_frame, text="Выбрать всё", command=_select_all).pack(side=tk.LEFT, padx=2) ttk.Button(btn_frame, text="Снять всё", command=_clear_all).pack(side=tk.LEFT, padx=2) ttk.Button(btn_frame, text="✅ Применить", command=_apply).pack(side=tk.RIGHT, padx=2)