在tcl / tk中显示gui上对象的名称

时间:2014-11-10 10:21:31

标签: tcl tk

如何在gui上显示/显示对象的名称(变量名)?

  

这是对象名称“frame”

  set frame [.c1 create rectangle 50 50 200 200 -width 4 -outline "red"]

当我点击它时,它会在文本框中或用鼠标指针显示其名称。怎么可能?请帮帮我。

2 个答案:

答案 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 ""}

当您尝试使用此功能时,请务必检查完全透明的项目(尤其是完全透明的多边形)。它们对于定义用户看不到的热区很有用,这是一种非常有用的技术,特别是如果它们放在其他几个可见的项目之上......