Python 如何将所有框架小部件绑定到<';输入'&燃气轮机;事件

Python 如何将所有框架小部件绑定到<';输入'&燃气轮机;事件,python,tkinter,binding,frame,Python,Tkinter,Binding,Frame,我在下面的代码中希望将所有frame1项绑定到事件,但它不起作用。我的意思是canvas.focus\u set()不会生效。我怎样才能解决我的问题 for w in frame1.winfo_children(): w.bind('<Enter>',canvas1.focus_set()) 用于frame1.winfo_children()中的w的: w、 绑定(“”,canvas1.focus_set()) 如果我看到您犯了任何错误,很可能您没有调用Enter键的wri

我在下面的代码中希望将所有frame1项绑定到事件,但它不起作用。我的意思是canvas.focus\u set()不会生效。我怎样才能解决我的问题

for w in frame1.winfo_children():
    w.bind('<Enter>',canvas1.focus_set())
用于frame1.winfo_children()中的w的
:
w、 绑定(“”,canvas1.focus_set())

如果我看到您犯了任何错误,很可能您没有调用
Enter
键的write命令。如果您试图在windows上执行此操作,最好使用
Return

更像:

for w in frame1.winfo_children():
    w.bind('<Return>',canvas1.focus_set())
用于frame1.winfo_children()中的w的
:
w、 绑定(“”,canvas1.focus_set())
事实上,它给了你正确的方向。当你这样做的时候

w.bind('<Enter>', canvas1.focus_set())
还是不行。
这是因为
bind
函数将一个事件对象传递给给定的函数,因此它将调用
canvas1.focus\u set(event)
而不是
canvas1.focus\u set()
。由于
focus\u set
不接受任何参数,因此此操作失败

您可以通过两种方式解决此问题。您可以创建一个额外的函数,该函数接受事件对象,然后不带参数地调用
canvas1.focus\u set()
,然后将事件绑定到此新函数。另一个选项是使用匿名的“lambda”函数来基本上完成类似的操作

w.bind('<Enter>', lambda e: canvas1.focus_set())
w.bind(“”,lambda e:canvas1.focus\u set())
这样,lambda函数接受事件对象为
e
,但不将其传递给
focus\u set



另外,
事件是而不是当您按下键盘上的Enter按钮时触发的事件(即
)。每当您将鼠标移动到小部件上时,就会触发
事件,当您用鼠标离开小部件时,会伴随
事件。这可能是您想要的,但它通常会导致混乱

通过使用frame1的父级canvas1.bind_all,我解决了我的问题。感谢所有的解决方案

或者你可能想检查
bind_all
method我检查了你的所有解决方案,但问题又出现了。我的问题是如何将所有框架项(如检查按钮)绑定到同一个函数event.bind方法需要的是方法本身(回调方法),而不是它的返回值。为什么选择向下投票?
Enter
在您自己的windows机器上工作吗?嗯?使用
Return
而不是
focus\u set()
您应该绑定到您之前由@Lafexlos
创建的函数实际上是一个有效的事件,并且在您使用鼠标输入小部件时触发。你说得对,
是按下Enter按钮的事件,但这是否是OP想要的,这个问题还不清楚。通过使用画布1.bind\u,这是frame1的父项,我解决了我的问题。感谢所有的解决方案。
w.bind('<Enter>', lambda e: canvas1.focus_set())