向绑定到键的tkinter事件回调传递参数

2024-04-19 15:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,这是我第一次使用tkinter。 我尝试创建一个事件,如果按下Enter键,我的函数被称为传入参数(在本例中,我希望传入entry小部件)。 下面是我的代码的简化版本:

def checkPassword(event):
    # do stuff

from tkinter import *
import tkinter.messagebox as box
window = Tk()
window.title('Booking System')
frame = Frame(window)
Entry = Entry(frame)
Entry.bind("<KeyRelease-Return>", checkPassword)
Entry.pack()
frame.pack()
window.mainloop()

这里的事件运行得很好,但是当我试图传递参数时遇到了问题。我试过了

^{pr2}$

并获取错误名称错误:未定义全局名称“self”

我也试过了

def checkPassword(self,event,param):
    # do stuff

import functools
Entry.bind("<KeyRelease-Return>", functools.partial(checkPassword, param=Entry))

但是get TypeError:checkPassword()缺少1个必需的位置参数:“event”

这两个问题我都解决不了,我已经在这里看过类似问题的解决方案,但是我的代码中没有任何一个可以使用。在


Tags: 代码importevent参数bindtkinterdef事件
2条回答

Kevin的回答对于包含数据和事件实例的一般问题是正确的,但是当额外的数据是导致事件的小部件时,这个答案是多余的。事件最多有17 attributes,包括.widget,该小部件是事件的源。(我强烈推荐包含上述链接的tkinter引用。)当return被点击时,下面将打印条目小部件的内容。在

from tkinter import *

def checkPassword(event):
    print(event.widget.get())

window = Tk()
Entry = Entry(window)
Entry.bind("<KeyRelease-Return>", checkPassword)
Entry.pack()
window.mainloop()

您的第二次尝试很接近,但是由于checkPassword不是类方法,因此不应该在它前面加上self.。在

def checkPassword(event, some_value_you_want):
    # do stuff

Entry.bind("<KeyRelease-Return>", lambda event: checkPassword(event, name_of_your_entry_widget))

相关问题 更多 >