fix: прочерк «—» у применимых показателей, «не применим» только у неприменимых

- применимый показатель: пусто / «—» (применим, категория не присвоена)
  / III / II / I категория
- неприменимый к сфере: в списке ТОЛЬКО «не применим», выбран
  автоматически, заблокирован, авто-обоснование из словаря сферы
- кнопка «🔓» разблокирует конкретный показатель и возвращает
  полный список (категории + прочерк)
This commit is contained in:
2026-08-04 21:01:58 +04:00
parent 7f70bb0792
commit b9968449ef
+17 -11
View File
@@ -1868,10 +1868,11 @@ class DokoGenApp:
return _just[m.group(1)] return _just[m.group(1)]
return None 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: try:
combo.config(state='readonly') combo.config(state='readonly')
combo.config(values=full_options if full_options else ['', ''])
var.set('') var.set('')
lbl_num.config(foreground='black') lbl_num.config(foreground='black')
lbl_name.config(foreground='black', text=name) 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 = ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT)
lbl_name.pack(side=tk.LEFT) lbl_name.pack(side=tk.LEFT)
# Выбор значения: пусто / «—» (применим, без категории) / «не применим» / категории # Выбор значения:
# - применимый показатель: пусто / «—» (применим, категория не присвоена) / III / II / I
# - неприменимый к сфере: только «не применим» (заблокирован, авто-обоснование из словаря)
var = tk.StringVar(value='') var = tk.StringVar(value='')
options = ['', '', 'не применим'] full_options = ['', '']
for cat in ('III', 'II', 'I'): for cat in ('III', 'II', 'I'):
v = values.get(cat, '') v = values.get(cat, '')
if v: 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, combo = ttk.Combobox(row, textvariable=var, state='readonly', width=34,
values=options) values=options)
combo.pack(side=tk.RIGHT, padx=6) combo.pack(side=tk.RIGHT, padx=6)
@@ -1963,8 +1967,10 @@ class DokoGenApp:
if not applicable_here: if not applicable_here:
# Показатель не применим для сферы объекта: # Показатель не применим для сферы объекта:
# автоматически выбираем «не применим» и блокируем, # в списке только «не применим», выбран автоматически и заблокирован.
# но даём кнопку «🔓» для разблокировки конкретного показателя # Кнопка «🔓» разблокировать конкретный показатель (вернуть категории и «—»)
options = ['не применим']
combo.config(values=options)
var.set('не применим') var.set('не применим')
combo.config(state='disabled') combo.config(state='disabled')
lbl_num.config(foreground='gray') lbl_num.config(foreground='gray')
@@ -1973,12 +1979,12 @@ class DokoGenApp:
btn_unlock = ttk.Button(row, text='🔓', width=3, btn_unlock = ttk.Button(row, text='🔓', width=3,
command=lambda c=combo, v=var, command=lambda c=combo, v=var,
ln=lbl_num, lname=lbl_name, 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.pack(side=tk.RIGHT, padx=(2, 0))
# ссылка на кнопку для возможного удаления — храним в замыкании
btn_unlock.config(command=lambda c=combo, v=var, ln=lbl_num, btn_unlock.config(command=lambda c=combo, v=var, ln=lbl_num,
lname=lbl_name, b=btn_unlock, nm=name: lname=lbl_name, b=btn_unlock, nm=name, fo=full_options:
_unlock(c, v, ln, lname, nm, b)) _unlock(c, v, ln, lname, nm, b, fo))
rows.append((num, name, values, var, applicable_here)) rows.append((num, name, values, var, applicable_here))
# Обоснование # Обоснование