Форум сайта python.su
Доброе время суток!!!
Пробую разобраться в питоне, кое как дошел до tkinter, возникают вопросы с обработкой событий, при нажатии на определенную клавишу.
рабочий пример из книжки:
def printer(event): print("Hello world!") root=Tkinter.Tk() but=Tkinter.Button(root, text="Print") but.bind("<Button-1>", printer) but.pack() # root.mainloop()
def ab(a,b): c=a+b print c return c root=Tkinter.Tk() but=Tkinter.Button(root, text="Print") but.bind("<Button-1>", ab(10,20)) # и чтобы с возвращенным значением можно было дальше работать but.pack() root.mainloop()
Офлайн
def ab(a, b): c = a + b print c return c def f(lst, a, b): lst.append(ab(a, b)) res = [] but.bind("<Button-1>", lambda: f(res, 10, 20))
def ab(a, b): c = a + b print c return c res = [] but.bind("<Button-1>", lambda: res.append(ab(10, 20)))
Отредактировано py.user.next (Июнь 25, 2012 04:34:16)
Офлайн
Здравствуйте, спасибо за отклик!!!
Верно ли я понял логику:
1. создаем пустой список res
2. при нажатии на кнопку “<Button-1>”, функция lambda добавляет в пустой список (res) результаты вычисления функции ab ???
вроде дело обстоит так.
НО ОШИБКА:
c:\Python27>sostav_2.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__ return self.func(*args) TypeError: <lambda>() takes no arguments (1 given)
Офлайн
Какая ошибка типа? Видимо событие передает в коллбэк параметр, который лямбда не принимает. Добавь в лямбду параметр.
but.bind("<Button-1>", lambda x: res.append(ab(10, 20)))
Офлайн
Большое спасибо всем!!!
Вы мне очень помогли!!!
Еще помогла другая ветка форума: http://python.su/forum/topic/9215/
Всем удачи!!!
Офлайн