如何将所有框架小工具绑定到<>事件

How to bind all frame widgets to lt;#39;Enter#39;gt; event(如何将所有框架小工具绑定到lt;gt;事件)
本文介绍了如何将所有框架小工具绑定到<>事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在以下代码中,我希望将所有Frame1项绑定到<;‘Enter’>事件,但它不起作用。我的意思是canvar.ocus_set()不会生效。我如何解决我的问题?
for w in frame1.winfo_children():
    w.bind('<Enter>',canvas1.focus_set())

推荐答案

comment made by Lafexlos实际上会将您引向正确的方向。当您这样做时

w.bind('<Enter>', canvas1.focus_set())

调用canvas1.focus_set()并使用此函数调用的返回值(即None)绑定到事件。这不是您想要的,因为现在每次触发事件时,都会执行None而不是canvas1.focus_set()

您应该做的是将函数引用传递给bind函数。调用canvas1.focus_set()的引用为canvas1.focus_set。但是,使用

w.bind('<Enter>', canvas1.focus_set)

仍然不起作用。
这是因为bind函数将事件对象传递给它所指定的函数,因此它将调用canvas1.focus_set(event)而不是canvas1.focus_set()。由于focus_set不接受任何参数,因此此操作失败。

您可以通过两种方式修复此问题。您可以创建一个额外的函数,该函数接受一个事件对象,然后在没有参数的情况下调用canvas1.focus_set(),然后将事件绑定到这个新函数。另一种选择是使用匿名"lambda"函数来执行相同的操作,如

w.bind('<Enter>', lambda e: canvas1.focus_set())

这样,lambda函数将事件对象接受为e,但不会将其传递给focus_set


备注。<Enter>事件是而不是当您按键盘上的<Return>)时触发的事件。当您将鼠标移到窗口小部件上时,<Enter>事件被触发,并且伴随着当您用鼠标离开窗口小部件时的<Leave>事件。这可能是您想要的,但它经常会导致混淆。

这篇关于如何将所有框架小工具绑定到&lt;&gt;事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)