Найти - Пользователи
Полная версия: обработка событий в tk
Начало » GUI » обработка событий в tk
1
xenon
Доброе время суток!!!
Пробую разобраться в питоне, кое как дошел до 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()
при нажатии на клавишу, выскакивает надпись “Hello world!” … мне вроде все понятно …
ВОПРОС: А как сделать так, чтобы при нажатии на кнопку вызывалась функция с 2-3 переменными, вычислялась и результат вычисления возвращался и присваивалось какой-либо переменной, чтобы можно было дальше в программе с ними работать???
НЕ РАБОЧИЙ пример:
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()

Заранее большое спасибо за помощь.
py.user.next
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))

add
def ab(a, b):
    c = a + b
    print c
    return c
         
res = []
but.bind("<Button-1>", lambda: res.append(ab(10, 20)))
xenon
Здравствуйте, спасибо за отклик!!!
Верно ли я понял логику:
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)

Подскажите пожалуйста, что не так, почему вылезает ошибка типа???
FishHook
Какая ошибка типа? Видимо событие передает в коллбэк параметр, который лямбда не принимает. Добавь в лямбду параметр.
but.bind("<Button-1>", lambda x: res.append(ab(10, 20)))
xenon
Большое спасибо всем!!!
Вы мне очень помогли!!!
Еще помогла другая ветка форума: http://python.su/forum/topic/9215/
Всем удачи!!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB