tkinter-bindo转换为按钮或更改绑定的命令



我制作了一个游戏,在游戏结束时,我更改按钮调用的命令。

我想知道是否有一种方法可以将bind链接到按钮而不是命令,或者我是否可以更改bind调用的命令。

这是我的按钮代码:

# create the button
self.but = Button(win, text="Submit", command=lambda: self.check_input(win))
self.but.grid(row=10, column=2, columnspan=3, sticky="NEWS")
win.bind("<enter>", self.check_input(win))
# change the button command
self.but["command"] = lambda: self.next(win, self.game_init)
self.but["text"] = "PLAY AGAIN!"

如果您的函数在绑定小部件时不使用tkinter传递的Event,那么它相当简单:

def check_input(self,win,event=None):
....
....
self.but = Button(win, text="Submit", command=lambda: self.check_input(win))
....
win.bind("<enter>", lambda e: self.check_input(win,e))

尽管始终遵循buttons命令的一种更简单且动态的方法是(如jasonharper所说(,但您根本无法使用e,即使是由给定事件触发的:

win.bind("<enter>", lambda e: self.but.invoke())

说明与按钮的bindcommand使用相同功能的示例:

from tkinter import *
root = Tk()
def func(win,e=None):
if e is not None:
print(f'Triggered by the hitting the {e.keysym} key')
else:
print('Triggered by the pressing button')

but = Button(root,text='Click me',command=lambda: func(root))
but.pack()
root.bind('<Return>',lambda e: func(root,e))
root.mainloop()

还有一个很好的时机,你的事件是错误的,你指的是'<Return>'(输入键(或'<Enter>'(当你用光标输入小部件的边界时(

最新更新