最近一直在写一个文件传阅系统,其中涉及到一个包含显示文件状态的text的notebook。虽然和本文无关,但还是要说一下的是,text最好指定一个height,不然在fill和expand之后,会在notebook中占据显示空间,我在这里用到的数值是7。还有的是,在布局notebook时可以考虑使用panedwindow,它可以缩放组件占据面积的大小。
言归正传,tooltip是用来为比如像工具栏中的按钮提供动态提示的组件。查看源代码,我们可以看到,被bind的Tooltip不是具体关于tooltip本身的,通过bindtag它被添加到需要被显示信息的组件的事件处理队列中。一旦比如Enter或者Leave事件发生,将运行tooltip中相应的函数。
具体用于显示信息的路径名为.__tooltip__的toplevel中只有一个label,有时候我们需要增加一些显示信息,比如图片之类的时候,就显得很不够。我们可以通过在.__tooltip__中增加一个canvas或者text来实现。对于原存在的label,我建议最多做一些configure,将其的anchor、bd、bg分别设为w、0、#ffffff,它便如个title一样,不会对显示效果产生太大影响。
但是还是存在一些局限,例如同时存在需要显示原状和增加了现实效果这两种tip时,上面的这种办法就无能为力了,因为.__tooltip__是被共享的,修改就意味着所有需要显示tip的组件都将为此使用新的风格。所以,可以确定的是,我们需要有两种显示状态。解决的办法按照深度可分为三种:第一种,在原先的.__tooltip__中针对不同的组件来withdrawn新增的效果,这需要做出一些判断,甚至在构造函数中增加一个选项;第二,在tooltip的hash变量G中除了TOPLEVEL之外,再增加一个例如TOPLEVEL_2这样的key值,也就是说再造一个专门用于显示特殊效果的组件,当然判断还是需要的;第三种也是最简单的一种,重建一个用来显示特殊效果tip的package,说起来好像很难,其实只是替换tooltip和Tooltip这两个关键词即可。