如何在gui上显示/显示对象的名称(变量名)?
这是对象名称“frame”
set frame [.c1 create rectangle 50 50 200 200 -width 4 -outline "red"]
当我点击它时,它会在文本框中或用鼠标指针显示其名称。怎么可能?请帮帮我。
答案 0 :(得分:0)
我不确定你到底在做什么,或者你想要发生什么。
我假设您已经创建了一个画布.c1
,您已成功将其显示在某个顶层窗口中,并且当用户点击该边框上的 时您想要回复该画布你创建的矩形。
在这种情况下,您需要为项目的点击指定绑定
.c1 bind $frame <button-1> {puts stdout "The frame has been clicked"}
这只会在控制台上打印一条消息,这足以证明该机制。您需要决定如何显示它。
或者,使用tklib中的工具提示包,记录here,通过
tooltip::tooltip .c1 -items $frame "The frame has been hovered over"
如果用户将鼠标悬停在框架的边框上,将显示“框架已...”。
答案 1 :(得分:0)
在GUI中显示变化字符串的最简单方法是使用设置了-textvariable
选项的标签。然后你可以设置一个变量,字符串就会出现。
要响应单击,画布项应该有一个绑定到它的事件处理程序脚本。要绑定的最常见事件是<ButtonPress>
- 通常为<1>
编写<ButtonPress-1>
,这是主鼠标按钮 - 以及<Enter>
和<Leave>
,它们处理跟踪鼠标结束的内容。 current
canvas标记跟踪当前项(如果有)。
结合这些:
pack [canvas .c1]
# make some items here...
.c1 create rectangle 50 50 200 200 -width 4 -outline "red"
# ...
pack [frame .f1 -textvariable msg]
.c1 bind all <1> {set msg "Click on %W:[%W finditem current]"}
.c1 bind all <Enter> {set msg "Entered %W:[%W finditem current]"}
.c1 bind all <Leave> {set msg ""}
当您尝试使用此功能时,请务必检查完全透明的项目(尤其是完全透明的多边形)。它们对于定义用户看不到的热区很有用,这是一种非常有用的技术,特别是如果它们放在其他几个可见的项目之上......