feat: вкладка «ПО» — многострочные поля (списки построчно, как в опроснике)

- hw_sw/os_sw/app_sw теперь tk.Text с прокруткой вместо однострочного Entry
- импортёр сохраняет переносы строк (_clean_multiline), а не схлопывает в одну строку
- _collect_is/_on_is_select поддержка Text-виджетов
This commit is contained in:
2026-08-04 15:59:06 +04:00
parent 463745123c
commit f5548f2fb8
2 changed files with 40 additions and 19 deletions
+19 -10
View File
@@ -920,16 +920,19 @@ class DokoGenApp:
sw_frame.pack(fill=tk.BOTH, expand=True)
sw_fields = [
("ПО и аппаратные средства (модели, производители, количество):", "is_hw_sw_entry"),
("Операционные системы:", "is_os_sw_entry"),
("Прикладные программы (MS Office, OpenOffice и пр.):", "is_app_sw_entry"),
("ПО и аппаратные средства (модели, производители, количество):", "is_hw_sw_entry", 5),
("Операционные системы:", "is_os_sw_entry", 3),
("Прикладные программы (MS Office, OpenOffice и пр.):", "is_app_sw_entry", 4),
]
for i, (label, attr) in enumerate(sw_fields):
ttk.Label(sw_frame, text=label).grid(row=i, column=0, sticky=tk.W, pady=2)
entry = ttk.Entry(sw_frame, width=70)
entry.grid(row=i, column=1, padx=8, sticky=tk.EW, pady=1)
setattr(self, attr, entry)
sw_frame.columnconfigure(1, weight=1)
for i, (label, attr, height) in enumerate(sw_fields):
ttk.Label(sw_frame, text=label).grid(row=i * 2, column=0, sticky=tk.W, pady=(4, 0))
txt = tk.Text(sw_frame, width=70, height=height, wrap=tk.WORD)
txt.grid(row=i * 2 + 1, column=0, columnspan=2, padx=8, sticky=tk.EW, pady=1)
sb = ttk.Scrollbar(sw_frame, orient=tk.VERTICAL, command=txt.yview)
sb.grid(row=i * 2 + 1, column=2, sticky=tk.NS)
txt.configure(yscrollcommand=sb.set)
setattr(self, attr, txt)
sw_frame.columnconfigure(0, weight=1)
# ===== Вкладка «Безопасность (236)» =====
sec_tab = ttk.Frame(nb2)
@@ -1228,7 +1231,10 @@ class DokoGenApp:
]:
w = getattr(self, attr, None)
if w is not None:
setattr(isys, model_field, w.get().strip())
if isinstance(w, tk.Text):
setattr(isys, model_field, w.get('1.0', 'end-1c').strip())
else:
setattr(isys, model_field, w.get().strip())
# Списки
isys.defense_tools_list = list(self.defense_tools_listbox.get(0, tk.END))
isys.users_list = list(self.users_listbox.get(0, tk.END))
@@ -1460,6 +1466,9 @@ class DokoGenApp:
val = getattr(isys, model_field, '') or ''
if isinstance(w, ttk.Combobox):
w.set(val)
elif isinstance(w, tk.Text):
w.delete('1.0', tk.END)
w.insert('1.0', val)
else:
w.delete(0, tk.END)
w.insert(0, val)