如何使用按键绑定和按钮命令运行 tkinter 函数?

Dav*_*ger 1 python tkinter function

是否可以通过按下按钮和事件来运行函数?当我尝试通过按下按钮来运行此功能时,可以理解的是,它给出了错误

类型错误:listFiller() 缺少 1 个必需的位置参数:“事件”。

找不到类似的问题,但也许这只是我缺乏编程知识。

代码:

class MyClass:

    def __init__(self, master):
        self.myButton = tk.Button(master, text='ok', command=self.listFiller)
        self.myButton.pack()

        self.myEntry = tk.Entry(master)
        self.myEntry.bind("<Return>",self.listFiller)
        self.myEntry.pack()

    def listFiller(self, event):
        data = self.myEntry.get()
        print(data)
Run Code Online (Sandbox Code Playgroud)

Coo*_*oud 5

尝试设置event=None该函数,然后仅从该函数传递事件bind,例如:

self.myButton = tk.Button(master, text='ok', command=self.listFiller)
.....

self.myEntry.bind("<Return>", lambda e: self.listFiller()) # Same as lambda e: self.listFiller(e)

def listFiller(self, event=None):
    data = self.myEntry.get()
Run Code Online (Sandbox Code Playgroud)

这样,当您按下按钮时,event将被视为None。但是,当bind被触发(即被Enter击中)时,event会隐式传递(即使您显式传递它也可以)作为e.

因此,在您了解了其背后的工作原理之后,即使您删除lambda,e仍然会被传递,因为event它是隐式发生的。

self.myEntry.bind("<Return>",self.listFiller) # As mentioned by Lafexlos
Run Code Online (Sandbox Code Playgroud)

尽管请记住,当您按下 tkinter 按钮时,您不能使用event、 likeevent.keysym或任何其他属性中的任何属性,但如果您使用 key 则可以使用Enter