Форум сайта python.su
Приветствую всех.
Имею пьяного Пайтона 3.8.10 на Win7. Пытаюсь сделать программку для своих нужд. Столкнулся с проблемой, которую не могу ни решить, ни обойти. Вот фрагмент проблемного кода:
# во вкладке создаём таблицу с отображением заголовков tblDom = ttk.Treeview(tabDom, columns=list(headers.keys())) ColWidth = int(tabDom.winfo_width() / len(headers.items())) # Ширина столбца = ширина окна/количество заголовков for column, name in headers.items(): # Для каждой колонки tblDom.heading(column, anchor=CENTER, text=name) # определяем заголовки tblDom.column(column, anchor=CENTER, stretch=True, width=ColWidth) #настраиваем колонки tblDom.bind('<Button-1>', Fn_TablSort) # Клик по заголовку вызывает сортировку по колонке tblDom.bind('<Return>', lambda: Fn_Add_Data(), '+')
Офлайн
Аргумент надо принимать в самой лямбда-функции. Обычно во многих языках в обработчики событий передаются сами эти события.
Alex.Pro.Прими событие в лямбдеtblDom.bind('<Return>', lambda: Fn_Add_Data(), '+')
tblDom.bind('<Return>', lambda event: Fn_Add_Data())
Отредактировано py.user.next (Ноя. 16, 2024 22:42:51)
Офлайн
py.user.next
Прими событие в лямбдеtblDom.bind('<Return>', lambda event: Fn_Add_Data())
Отредактировано Alex.Pro. (Ноя. 16, 2024 23:28:35)
Офлайн
Alex.Pro.Значит, функция Fn_Add_Data() написана неправильно. Она вызывается, но не срабатывает так, как задумано.
Как будто строка просто игнорируется.
def f(): print('f') tblDom.bind('<Return>', lambda event: f())
Офлайн
py.user.nextНе согласен. Хотя, в принципе, Вы правы. Эта функция написана правильно и срабатывает как задумывалось. Только она задумывалась не для вывода чего-либо на экран, а для записи данных в БД, без лишних сообщений. Я затупил и пытался привязать не ту функцию! Поэтому и не увидел когда привязка сработала. Сменил функцию на Fn_Ed_Data() и увидел что Ваш вариант, действительно, работает.
Значит, функция Fn_Add_Data() написана неправильно. Она вызывается, но не срабатывает так, как задумано.
Офлайн