feat: выпадающие списки открываются кликом в любом месте поля (не только по стрелке)
Добавлен обработчик _combo_open для всех комбобоксов: клик по полю раскрывает список, не нужно тянуть курсор в правый угол к стрелке.
This commit is contained in:
@@ -796,6 +796,7 @@ class DokoGenApp:
|
|||||||
# Сфера деятельности — словарик + выпадающий список
|
# Сфера деятельности — словарик + выпадающий список
|
||||||
ttk.Label(main_frame, text="Сфера деятельности:").grid(row=1, column=0, sticky=tk.W, pady=2)
|
ttk.Label(main_frame, text="Сфера деятельности:").grid(row=1, column=0, sticky=tk.W, pady=2)
|
||||||
self.is_sphere_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
self.is_sphere_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
||||||
|
self.is_sphere_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_sphere_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_sphere_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
import json as _json
|
import json as _json
|
||||||
@@ -808,6 +809,7 @@ class DokoGenApp:
|
|||||||
# Тип объекта — словарик + выпадающий список
|
# Тип объекта — словарик + выпадающий список
|
||||||
ttk.Label(main_frame, text="Тип объекта:").grid(row=2, column=0, sticky=tk.W, pady=2)
|
ttk.Label(main_frame, text="Тип объекта:").grid(row=2, column=0, sticky=tk.W, pady=2)
|
||||||
self.is_object_type_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
self.is_object_type_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
||||||
|
self.is_object_type_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_object_type_combo.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_object_type_combo.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
_ot = os.path.join(os.path.dirname(__file__), 'dictionaries', 'object_types.json')
|
_ot = os.path.join(os.path.dirname(__file__), 'dictionaries', 'object_types.json')
|
||||||
@@ -819,6 +821,7 @@ class DokoGenApp:
|
|||||||
# Архитектура объекта — словарик + выпадающий список
|
# Архитектура объекта — словарик + выпадающий список
|
||||||
ttk.Label(main_frame, text="Архитектура объекта:").grid(row=3, column=0, sticky=tk.W, pady=2)
|
ttk.Label(main_frame, text="Архитектура объекта:").grid(row=3, column=0, sticky=tk.W, pady=2)
|
||||||
self.is_architecture_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
self.is_architecture_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
||||||
|
self.is_architecture_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_architecture_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_architecture_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
_ar = os.path.join(os.path.dirname(__file__), 'dictionaries', 'architectures.json')
|
_ar = os.path.join(os.path.dirname(__file__), 'dictionaries', 'architectures.json')
|
||||||
@@ -830,6 +833,7 @@ class DokoGenApp:
|
|||||||
# Типовой отраслевой объект КИИ — словарик + выпадающий список
|
# Типовой отраслевой объект КИИ — словарик + выпадающий список
|
||||||
ttk.Label(main_frame, text="Типовой отраслевой объект КИИ:").grid(row=4, column=0, sticky=tk.W, pady=2)
|
ttk.Label(main_frame, text="Типовой отраслевой объект КИИ:").grid(row=4, column=0, sticky=tk.W, pady=2)
|
||||||
self.is_typical_object_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
self.is_typical_object_combo = ttk.Combobox(main_frame, width=68, state='readonly')
|
||||||
|
self.is_typical_object_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_typical_object_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_typical_object_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
_to = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_objects.json')
|
_to = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_objects.json')
|
||||||
@@ -868,6 +872,7 @@ class DokoGenApp:
|
|||||||
# Категория сети — словарик
|
# Категория сети — словарик
|
||||||
ttk.Label(net_frame, text="Категория сети электросвязи:").grid(row=1, column=0, sticky=tk.W, pady=2)
|
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, state='readonly')
|
self.is_net_category_combo = ttk.Combobox(net_frame, width=68, state='readonly')
|
||||||
|
self.is_net_category_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
import json as _json
|
import json as _json
|
||||||
@@ -885,6 +890,7 @@ class DokoGenApp:
|
|||||||
# Цель взаимодействия — словарик
|
# Цель взаимодействия — словарик
|
||||||
ttk.Label(net_frame, text="Цель взаимодействия с сетью электросвязи:").grid(row=3, column=0, sticky=tk.W, pady=2)
|
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, state='readonly')
|
self.is_net_purpose_combo = ttk.Combobox(net_frame, width=68, state='readonly')
|
||||||
|
self.is_net_purpose_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
_np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json')
|
_np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json')
|
||||||
@@ -896,6 +902,7 @@ class DokoGenApp:
|
|||||||
# Способ взаимодействия — словарик
|
# Способ взаимодействия — словарик
|
||||||
ttk.Label(net_frame, text="Способ взаимодействия (тип доступа):").grid(row=4, column=0, sticky=tk.W, pady=2)
|
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, state='readonly')
|
self.is_net_method_combo = ttk.Combobox(net_frame, width=68, state='readonly')
|
||||||
|
self.is_net_method_combo.bind('<Button-1>', self._combo_open)
|
||||||
self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
|
self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
|
||||||
try:
|
try:
|
||||||
_nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json')
|
_nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json')
|
||||||
@@ -1642,6 +1649,14 @@ class DokoGenApp:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
messagebox.showerror("Ошибка", f"Не удалось загрузить словарь: {e}")
|
messagebox.showerror("Ошибка", f"Не удалось загрузить словарь: {e}")
|
||||||
|
|
||||||
|
def _combo_open(self, event):
|
||||||
|
"""Клик в любом месте комбобокса раскрывает список (не только по стрелке)."""
|
||||||
|
try:
|
||||||
|
event.widget.event_generate('<Down>')
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return 'break'
|
||||||
|
|
||||||
# ==================== ОКВЭД ====================
|
# ==================== ОКВЭД ====================
|
||||||
def _load_okved_dict(self):
|
def _load_okved_dict(self):
|
||||||
"""Загружает словарь ОКВЭД (dictionaries/okved.json)."""
|
"""Загружает словарь ОКВЭД (dictionaries/okved.json)."""
|
||||||
|
|||||||
Reference in New Issue
Block a user