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)) # Обоснование