python tkinter 控件的command 能否直接传递事件参数
时间: 2023-07-07 11:05:01 浏览: 123
关于Python Tkinter Button控件command传参问题的解决方式
5星 · 资源好评率100%
在Tkinter中,`command`参数可以指定一个回调函数,但是该函数不能直接传递事件参数。如果需要传递事件参数,可以使用 `lambda` 函数或者 `functools.partial()` 函数来创建一个新的函数,将事件参数作为参数传递给回调函数。
以下是使用`lambda`函数传递事件参数的示例代码:
```python
import tkinter as tk
def callback(event):
print(event.widget["text"])
root = tk.Tk()
button = tk.Button(root, text="Hello")
button.bind("<Button-1>", callback)
button.config(command=lambda event: button.event_generate("<Button-1>"))
button.pack()
root.mainloop()
```
以上代码中,我们创建了一个按钮 `button`,并绑定了鼠标左键点击事件 `<Button-1>` 的回调函数 `callback`。然后,我们通过 `button.config()` 方法将 `command` 参数设置为一个 `lambda` 函数,该函数在调用时会生成 `<Button-1>` 事件,从而触发回调函数。在 `lambda` 函数中,我们将事件参数 `event` 传递给了回调函数。
类似地,您也可以使用 `functools.partial()` 函数来传递事件参数,以下是示例代码:
```python
import tkinter as tk
import functools
def callback(event, text):
print(text)
root = tk.Tk()
button = tk.Button(root, text="Hello")
button.bind("<Button-1>", functools.partial(callback, text="Hello"))
button.config(command=lambda event: button.event_generate("<Button-1>"))
button.pack()
root.mainloop()
```
以上代码中,我们使用 `functools.partial()` 函数创建了一个新的函数 `partial_callback`,将 `callback` 函数和需要传递的参数绑定在一起。然后,我们将 `partial_callback` 函数作为回调函数绑定到按钮的单击事件上,并在 `lambda` 函数中调用 `event_generate()` 方法来触发事件。在 `callback` 函数中,我们可以使用传递过来的 `text` 参数。
阅读全文