我制作了一个游戏,在游戏结束时,我更改按钮调用的命令。
我想知道是否有一种方法可以将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())
说明与按钮的bind
和command
使用相同功能的示例:
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>'
(当你用光标输入小部件的边界时(