Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2012 20:55:16

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка событий в tk

Доброе время суток!!!
Пробую разобраться в питоне, кое как дошел до 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()

Заранее большое спасибо за помощь.



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#2 Июнь 25, 2012 02:11:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

обработка событий в tk

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)))



Отредактировано py.user.next (Июнь 25, 2012 04:34:16)

Офлайн

#3 Июнь 25, 2012 13:33:40

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка событий в tk

Здравствуйте, спасибо за отклик!!!
Верно ли я понял логику:
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)

Подскажите пожалуйста, что не так, почему вылезает ошибка типа???



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#4 Июнь 25, 2012 13:37:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

обработка событий в tk

Какая ошибка типа? Видимо событие передает в коллбэк параметр, который лямбда не принимает. Добавь в лямбду параметр.

but.bind("<Button-1>", lambda x: res.append(ab(10, 20)))



Офлайн

#5 Июнь 25, 2012 22:38:03

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка событий в tk

Большое спасибо всем!!!
Вы мне очень помогли!!!
Еще помогла другая ветка форума: http://python.su/forum/topic/9215/
Всем удачи!!!



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version