From 4e7c3463f454821b794f520deaba399017758a8c Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 15:38:08 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA?= =?UTF-8?q?=D0=B8=20=C2=AB=D0=A1=D0=B5=D1=82=D1=8C=C2=BB=20=D0=B8=20=C2=AB?= =?UTF-8?q?=D0=9F=D0=9E=C2=BB=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=C2=AB=D0=A1=D0=B5=D1=82=D0=B8=20=D0=B8=20=D0=9F=D0=9E=C2=BB,?= =?UTF-8?q?=20=D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D1=80=D0=B8=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B5=D1=82=D0=B8,=20=C2=AB=D0=91=D0=B5=D0=B7=D0=BE?= =?UTF-8?q?=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C=C2=BB=20=D0=B2?= =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=C2=AB=D0=91=D0=B5=D0=B7=D0=BE?= =?UTF-8?q?=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20(236)=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - вкладка «Сеть»: категория сети (словарик), провайдер, цель взаимодействия (словарик), способ взаимодействия (словарик), ЛВС/Интернет - вкладка «ПО»: ПО и аппаратные средства, ОС, прикладные программы - словари: net_categories.json, net_purposes.json, net_methods.json - вкладка безопасности переименована в «Безопасность» --- dokogen/dictionaries/net_categories.json | 9 +++ dokogen/dictionaries/net_methods.json | 4 ++ dokogen/dictionaries/net_purposes.json | 7 ++ dokogen/ui.py | 90 +++++++++++++++++------- 4 files changed, 86 insertions(+), 24 deletions(-) create mode 100644 dokogen/dictionaries/net_categories.json create mode 100644 dokogen/dictionaries/net_methods.json create mode 100644 dokogen/dictionaries/net_purposes.json diff --git a/dokogen/dictionaries/net_categories.json b/dokogen/dictionaries/net_categories.json new file mode 100644 index 0000000..7f7204f --- /dev/null +++ b/dokogen/dictionaries/net_categories.json @@ -0,0 +1,9 @@ +[ + "общего пользования", + "выделенная", + "технологическая", + "присоединенная к сети связи общего пользования", + "специального назначения", + "другая сеть связи для передачи информации при помощи электромагнитных систем", + "взаимодействие с сетями электросвязи отсутствует" +] diff --git a/dokogen/dictionaries/net_methods.json b/dokogen/dictionaries/net_methods.json new file mode 100644 index 0000000..f706102 --- /dev/null +++ b/dokogen/dictionaries/net_methods.json @@ -0,0 +1,4 @@ +[ + "проводной", + "беспроводной" +] diff --git a/dokogen/dictionaries/net_purposes.json b/dokogen/dictionaries/net_purposes.json new file mode 100644 index 0000000..a550adb --- /dev/null +++ b/dokogen/dictionaries/net_purposes.json @@ -0,0 +1,7 @@ +[ + "передача (прием) информации", + "оказание услуг", + "управление", + "контроль за технологическим производственным оборудованием (исполнительными устройствами)", + "иная цель" +] diff --git a/dokogen/ui.py b/dokogen/ui.py index dfd4381..1bfd7d4 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -859,9 +859,9 @@ class DokoGenApp: setattr(self, attr, entry) subj_frame.columnconfigure(1, weight=1) - # ===== Вкладка «Сети и ПО» ===== + # ===== Вкладка «Сеть» ===== net_tab = ttk.Frame(nb2) - nb2.add(net_tab, text="Сети и ПО") + nb2.add(net_tab, text="Сеть") net_frame = ttk.Frame(net_tab, padding=8) net_frame.pack(fill=tk.BOTH, expand=True) @@ -873,26 +873,68 @@ class DokoGenApp: self.is_internet_var = tk.BooleanVar() ttk.Checkbutton(chk, text="Интернет", variable=self.is_internet_var).pack(side=tk.LEFT, padx=5) - net_fields = [ - ("Категория сети электросвязи:", "is_net_category_entry", 1), - ("Оператор связи/провайдер хостинга:", "is_net_operator_entry", 2), - ("Цель взаимодействия с сетью:", "is_net_purpose_entry", 3), - ("Способ взаимодействия/тип доступа:", "is_net_method_entry", 4), - ("ПО и аппаратные средства:", "is_hw_sw_entry", 5), - ("Общесистемное ПО (ОС, виртуализация):", "is_os_sw_entry", 6), - ("Прикладные программы:", "is_app_sw_entry", 7), - ("Программное обеспечение:", "is_software_entry", 8), - ] - for label, attr, row in net_fields: - ttk.Label(net_frame, text=label).grid(row=row, column=0, sticky=tk.W, pady=2) - entry = ttk.Entry(net_frame, width=70) - entry.grid(row=row, column=1, padx=8, sticky=tk.EW, pady=1) - setattr(self, attr, entry) + # Категория сети — словарик + ttk.Label(net_frame, text="Категория сети электросвязи:").grid(row=1, column=0, sticky=tk.W, pady=2) + self.is_net_category_combo = ttk.Combobox(net_frame, width=68) + self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1) + try: + import json as _json + _nc = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_categories.json') + with open(_nc, encoding='utf-8') as _f: + self.is_net_category_combo['values'] = _json.load(_f) + except Exception: + pass + + # Провайдер + ttk.Label(net_frame, text="Наименование провайдера:").grid(row=2, column=0, sticky=tk.W, pady=2) + self.is_net_operator_entry = ttk.Entry(net_frame, width=70) + self.is_net_operator_entry.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1) + + # Цель взаимодействия — словарик + ttk.Label(net_frame, text="Цель взаимодействия с сетью электросвязи:").grid(row=3, column=0, sticky=tk.W, pady=2) + self.is_net_purpose_combo = ttk.Combobox(net_frame, width=68) + self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1) + try: + _np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json') + with open(_np, encoding='utf-8') as _f: + self.is_net_purpose_combo['values'] = _json.load(_f) + except Exception: + pass + + # Способ взаимодействия — словарик + ttk.Label(net_frame, text="Способ взаимодействия (тип доступа):").grid(row=4, column=0, sticky=tk.W, pady=2) + self.is_net_method_combo = ttk.Combobox(net_frame, width=68) + self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1) + try: + _nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json') + with open(_nm, encoding='utf-8') as _f: + self.is_net_method_combo['values'] = _json.load(_f) + except Exception: + pass + net_frame.columnconfigure(1, weight=1) + # ===== Вкладка «ПО» ===== + sw_tab = ttk.Frame(nb2) + nb2.add(sw_tab, text="ПО") + sw_frame = ttk.Frame(sw_tab, padding=8) + 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"), + ] + 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) + # ===== Вкладка «Безопасность (236)» ===== sec_tab = ttk.Frame(nb2) - nb2.add(sec_tab, text="Безопасность (236)") + nb2.add(sec_tab, text="Безопасность") sec_frame = ttk.Frame(sec_tab, padding=8) sec_frame.pack(fill=tk.BOTH, expand=True) sec_fields = [ @@ -1172,10 +1214,10 @@ class DokoGenApp: ('is_subject_element_entry', 'subject_element'), ('is_subject_inn_entry', 'subject_inn'), ('is_subject_kpp_entry', 'subject_kpp'), - ('is_net_category_entry', 'net_category'), + ('is_net_category_combo', 'net_category'), ('is_net_operator_entry', 'net_operator'), - ('is_net_purpose_entry', 'net_purpose'), - ('is_net_method_entry', 'net_method'), + ('is_net_purpose_combo', 'net_purpose'), + ('is_net_method_combo', 'net_method'), ('is_hw_sw_entry', 'hw_sw'), ('is_os_sw_entry', 'os_sw'), ('is_app_sw_entry', 'app_sw'), @@ -1405,10 +1447,10 @@ class DokoGenApp: ('is_subject_element_entry', 'subject_element'), ('is_subject_inn_entry', 'subject_inn'), ('is_subject_kpp_entry', 'subject_kpp'), - ('is_net_category_entry', 'net_category'), + ('is_net_category_combo', 'net_category'), ('is_net_operator_entry', 'net_operator'), - ('is_net_purpose_entry', 'net_purpose'), - ('is_net_method_entry', 'net_method'), + ('is_net_purpose_combo', 'net_purpose'), + ('is_net_method_combo', 'net_method'), ('is_hw_sw_entry', 'hw_sw'), ('is_os_sw_entry', 'os_sw'), ('is_app_sw_entry', 'app_sw'),