Как передать аргумент обработчику событий в tkinter?

widget.bind('<Button-1>',callback)   # binding 

def callback(self,event)
    #do something

Я должен передать аргумент callback() . Аргументом является объект словаря.

25
задан nbro 17 January 2015 в 17:33
поделиться

3 ответа

Вы можете использовать лямбда для определения анонимной функции, например:

data={"one": 1, "two": 2}

widget.bind("<ButtonPress-1>", lambda event, arg=data: self.on_mouse_down(event, arg))

Обратите внимание, что переданный arg становится обычным аргументом, который вы используете так же, как и все другие аргументы. :

def on_mouse_down(self, event, arg):
    print(arg)
44
ответ дан 28 November 2019 в 18:27
поделиться

А как насчет

import functools
def callback(self, event, param):
    pass
arg = 123
widget.bind("", functools.partial(callback, param=arg))
10
ответ дан 28 November 2019 в 18:27
поделиться

Я думаю, что в большинстве случаев вам не нужен аргумент для обратного вызова, потому что обратный вызов может быть методом экземпляра, который может обращаться к членам экземпляра:

from Tkinter import *

class MyObj:
    def __init__(self, arg):
        self.arg = arg

    def callback(self, event):
        print self.arg

obj = MyObj('I am Obj')
root = Tk()
btn=Button(root, text="Click")
btn.bind('<Button-1>', obj.callback)
btn.pack()
root.mainloop()

Но я думаю, что решение functools, предложенное Филиппом, тоже очень хорошее

4
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: