2024-06-23 19:33:43 发布
网友
我在下面的代码中希望将所有frame1项绑定到<;“Enter”>;事件,但它不起作用。我是说canvas.focus\u集()不生效。我怎样才能解决我的问题?你知道吗
for w in frame1.winfo_children(): w.bind('<Enter>',canvas1.focus_set())
通过使用frame1的父级canvas1.bind\u all,我解决了我的问题。感谢所有的解决方案。你知道吗
实际上,comment made by Lafexlos给了你正确的方向。当你这么做的时候
w.bind('<Enter>', canvas1.focus_set())
调用canvas1.focus_set(),并使用此函数调用的返回值(即None)绑定到事件。这不是您想要的,因为现在每次触发事件时,都会执行None,而不是canvas1.focus_set()。你知道吗
canvas1.focus_set()
None
您应该做的是将函数引用传递给bind函数。调用canvas1.focus_set()的引用是canvas1.focus_set。但是,使用
bind
canvas1.focus_set
w.bind('<Enter>', canvas1.focus_set)
还是不行。 这是因为bind函数将事件对象传递给给定的函数,因此它将调用canvas1.focus_set(event),而不是canvas1.focus_set()。因为focus_set不接受任何参数,所以失败。你知道吗
canvas1.focus_set(event)
focus_set
你可以用两种方法来解决这个问题。您可以创建一个额外的函数,它接受一个事件对象,然后不带参数地调用canvas1.focus_set(),然后将事件绑定到这个新函数。另一种选择是使用匿名的“lambda”函数来实现基本相同的功能
w.bind('<Enter>', lambda e: canvas1.focus_set())
这样,lambda函数将事件对象作为e接受,但不将其传递给focus_set。你知道吗
e
另外,<Enter>事件是而不是当您按下键盘上的回车按钮(即<Return>)时触发的事件。每当您将鼠标移到小部件上时,<Enter>事件就会触发,当您将小部件与鼠标一起离开时,<Leave>事件也会随之触发。这可能是你想要的,但它常常导致混乱。你知道吗
<Enter>
<Return>
<Leave>
如果我看到您犯了任何错误,很可能您没有调用Enter键的write命令。希望,如果您正试图在windows上这样做,您应该使用Return。你知道吗
Enter
Return
更像:
for w in frame1.winfo_children(): w.bind('<Return>',canvas1.focus_set())
通过使用frame1的父级canvas1.bind\u all,我解决了我的问题。感谢所有的解决方案。你知道吗
实际上,comment made by Lafexlos给了你正确的方向。当你这么做的时候
调用
canvas1.focus_set()
,并使用此函数调用的返回值(即None
)绑定到事件。这不是您想要的,因为现在每次触发事件时,都会执行None
,而不是canvas1.focus_set()
。你知道吗您应该做的是将函数引用传递给
bind
函数。调用canvas1.focus_set()
的引用是canvas1.focus_set
。但是,使用还是不行。
这是因为
bind
函数将事件对象传递给给定的函数,因此它将调用canvas1.focus_set(event)
,而不是canvas1.focus_set()
。因为focus_set
不接受任何参数,所以失败。你知道吗你可以用两种方法来解决这个问题。您可以创建一个额外的函数,它接受一个事件对象,然后不带参数地调用
canvas1.focus_set()
,然后将事件绑定到这个新函数。另一种选择是使用匿名的“lambda”函数来实现基本相同的功能这样,lambda函数将事件对象作为
e
接受,但不将其传递给focus_set
。你知道吗另外,
<Enter>
事件是而不是当您按下键盘上的回车按钮(即<Return>
)时触发的事件。每当您将鼠标移到小部件上时,<Enter>
事件就会触发,当您将小部件与鼠标一起离开时,<Leave>
事件也会随之触发。这可能是你想要的,但它常常导致混乱。你知道吗如果我看到您犯了任何错误,很可能您没有调用
Enter
键的write命令。希望,如果您正试图在windows上这样做,您应该使用Return
。你知道吗更像:
相关问题 更多 >
编程相关推荐