widget.bind('<Button-1>',callback) # binding
def callback(self,event)
#do something
我需要將參數傳遞給callback()
。該參數是一個字典對象。如何將參數傳遞給tkinter中的事件處理程序?
widget.bind('<Button-1>',callback) # binding
def callback(self,event)
#do something
我需要將參數傳遞給callback()
。該參數是一個字典對象。如何將參數傳遞給tkinter中的事件處理程序?
什麼
import functools
def callback(self, event, param):
pass
arg = 123
widget.bind("", functools.partial(callback, param=arg))
我認爲,在大多數情況下,你不需要任何參數的回調,因爲回調可以是能夠訪問實例成員實例方法:
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()
但我認爲Philipp提出的functools解決方案也非常好
您可以使用lambda
定義一個匿名函數,如:
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)
傳遞迴調函數的實例,在實例方法調用它。
from tkinter import *
class MyClass:
def __init__(self, my_callback, message):
self.my_callback = my_callback
self.message = message
def callback(self, event):
self.my_callback(self)
def my_callback(o):
print(o.message)
obj = MyClass(my_callback, "I am instance of MyClass")
root = Tk()
btn=Button(root, text="Click")
btn.bind('<Button-1>', obj.callback)
btn.pack()
這裏是他們所有的,我認爲最簡單和最容易閱讀的解決方案:這個小部件的定義,只給
widget.bind('<Button-1>', callback2)
def callback(self, event, custom_arg=None): #change "None" to whatever you want the default value to be
#do something
def callback2(self, event):
callback(event, custom_arg=something_you_set) #set custom_arg to whatever you want it to be when Button-1 is pressed
請解釋downvotes。這是一個學習的論壇。 – 2016-11-29 21:43:54
可能是因爲,你在兩個步驟中完成了你可以在一個步驟中完成的任務。只是我的觀點。 – ihayet 2017-04-10 15:21:12
還可以提供參數的小工具的回調函數作爲類定義的一部分 ,,即考慮這個微小的Python 2.7版程序(不負責程序執行的部分):
import Tkinter as tk #To be able to get "tk.Button" safely
from Tkinter import *
class EXAMPLE(Frame):
def __init__(self,master=None):
Frame.__init__(self,master)
#make the widgets appear to a grid of size = 2 X 2
for row in range(2):
self.grid_rowconfigure(row,minsize=20)
for col in range(2):
self.grid_columnconfigure(col,minsize=20)
#Call our METHOD OF INTEREST
self.AnyMethod()
#This is our method of interest
def AnyMethod(self):
#arguments to be supplied
self.arg1 = 'I am 1st argument'
self.arg2 = 'I am 2nd argument'
self.arg3 = 'I am 3rd argument'
#Draw the widget, & supply its callback method
self.widgetname=tk.Button(self.master,text="My Button",command=self.method_callback)
self.widgetname.grid(row=0,column=0)
#create a so-called 'shell method' to swallow the REAL callback function
def method_callback(self):
func_callback(self.arg1,self.arg2,self.arg3)
#Define the REAL callback function in the Module's scope
def func_callback(arg1,arg2,arg3):
print arg1
print arg2
print arg3
注意提供的參數必須self.
被起訴你想從綁定通過它,或回調時做? – 2010-07-21 07:05:50
當回調完成時,我應該傳遞一個參數 – sag 2010-07-21 07:26:09