From b9968449ef465312405b23ab25e3ee85681089c4 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 21:01:58 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D1=80=D0=BE=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=20=C2=AB=E2=80=94=C2=BB=20=D1=83=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8=D0=BC=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9,=20=C2=AB?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=D0=BC?= =?UTF-8?q?=C2=BB=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=83=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=D0=BC=D1=8B?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - применимый показатель: пусто / «—» (применим, категория не присвоена) / III / II / I категория - неприменимый к сфере: в списке ТОЛЬКО «не применим», выбран автоматически, заблокирован, авто-обоснование из словаря сферы - кнопка «🔓» разблокирует конкретный показатель и возвращает полный список (категории + прочерк) --- dokogen/ui.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/dokogen/ui.py b/dokogen/ui.py index feea876..5740acf 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -1868,10 +1868,11 @@ class DokoGenApp: return _just[m.group(1)] return None - def _unlock(combo, var, lbl_num, lbl_name, name, btn=None): - """Разблокировать конкретный показатель: вернуть выбор категории.""" + def _unlock(combo, var, lbl_num, lbl_name, name, btn=None, full_options=None): + """Разблокировать конкретный показатель: вернуть категории и «—» (прочерк).""" try: combo.config(state='readonly') + combo.config(values=full_options if full_options else ['', '—']) var.set('') lbl_num.config(foreground='black') lbl_name.config(foreground='black', text=name) @@ -1935,13 +1936,16 @@ class DokoGenApp: # Текст показателя lbl_name = ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT) lbl_name.pack(side=tk.LEFT) - # Выбор значения: пусто / «—» (применим, без категории) / «не применим» / категории + # Выбор значения: + # - применимый показатель: пусто / «—» (применим, категория не присвоена) / III / II / I + # - неприменимый к сфере: только «не применим» (заблокирован, авто-обоснование из словаря) var = tk.StringVar(value='') - options = ['', '—', 'не применим'] + full_options = ['', '—'] for cat in ('III', 'II', 'I'): v = values.get(cat, '') if v: - options.append(f"{cat} категория: {v}") + full_options.append(f"{cat} категория: {v}") + options = full_options combo = ttk.Combobox(row, textvariable=var, state='readonly', width=34, values=options) combo.pack(side=tk.RIGHT, padx=6) @@ -1963,8 +1967,10 @@ class DokoGenApp: if not applicable_here: # Показатель не применим для сферы объекта: - # автоматически выбираем «не применим» и блокируем, - # но даём кнопку «🔓» для разблокировки конкретного показателя + # в списке только «не применим», выбран автоматически и заблокирован. + # Кнопка «🔓» — разблокировать конкретный показатель (вернуть категории и «—») + options = ['не применим'] + combo.config(values=options) var.set('не применим') combo.config(state='disabled') lbl_num.config(foreground='gray') @@ -1973,12 +1979,12 @@ class DokoGenApp: btn_unlock = ttk.Button(row, text='🔓', width=3, command=lambda c=combo, v=var, ln=lbl_num, lname=lbl_name, - b=None, nm=name: _unlock(c, v, ln, lname, nm)) + b=None, nm=name, fo=full_options: + _unlock(c, v, ln, lname, nm, b, fo)) btn_unlock.pack(side=tk.RIGHT, padx=(2, 0)) - # ссылка на кнопку для возможного удаления — храним в замыкании btn_unlock.config(command=lambda c=combo, v=var, ln=lbl_num, - lname=lbl_name, b=btn_unlock, nm=name: - _unlock(c, v, ln, lname, nm, b)) + lname=lbl_name, b=btn_unlock, nm=name, fo=full_options: + _unlock(c, v, ln, lname, nm, b, fo)) rows.append((num, name, values, var, applicable_here)) # Обоснование