feat: выпадающие списки открываются кликом в любом месте поля (не только по стрелке)

Добавлен обработчик _combo_open для всех комбобоксов: клик по полю
раскрывает список, не нужно тянуть курсор в правый угол к стрелке.
This commit is contained in:
2026-08-04 15:56:52 +04:00
parent 4ca596102f
commit 463745123c
+15
View File
@@ -796,6 +796,7 @@ class DokoGenApp:
# Сфера деятельности — словарик + выпадающий список
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.bind('<Button-1>', self._combo_open)
self.is_sphere_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
try:
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)
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)
try:
_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)
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)
try:
_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)
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)
try:
_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)
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)
try:
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)
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)
try:
_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)
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)
try:
_nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json')
@@ -1642,6 +1649,14 @@ class DokoGenApp:
except Exception as 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):
"""Загружает словарь ОКВЭД (dictionaries/okved.json)."""