【发布时间】:2015-06-02 15:14:38
【问题描述】:
我正在使用 Perl Tkx 制作一个简单的应用程序,并允许用户选择一个目录。如果名称太长,我想截断它并在末尾附加“...”,而不是使用文本换行或将框拉伸到荒谬的长度来显示整个目录名称。
问题在于标签的宽度被定义为任意值(如 40)。如果这个值是标签可以容纳多少个字符的度量,我可以将字符串截断为 37 并附加“...”,但情况似乎并非如此。
有谁知道使用 Perl Tkx 的标签的-width 实际上是衡量什么?如何找到我的字符串将占用的 -width 单位的数量,以便找出截断它的适当点?
编辑:
我在tcl manual找到了这个答案:
数据库类:宽度 指定标签的所需宽度。如果 图像或位图显示在标签中,然后值在 屏幕单位(即 Tk_GetPixels 可接受的任何形式);为了 文本是字符。
如果未指定此选项,则计算标签所需的宽度 从其中显示的图像或位图或文本的大小。
这应该意味着对于 40 的宽度来截断文本,我只需要将字符串截断为 37 个字符并添加“...”。
我通过用所有“M”填充标签来测试这一点。我使用了字母“M”,因为它通常是最宽的字符(see here)。我编写了在 37 个“M”处截断并在末尾添加“...”的代码,但在大约 24 个“M”之后,“M”似乎溢出了标签的末尾。
这意味着假设它只是拉伸标签以适应最宽的 40 个字符是不安全的......因此我的问题仍未得到解答。
如何确定字符串的“宽度”以便适当截断它?
EDIT2:
我找到了一种解决方法,但它仍然不是我正在寻找的解决方案。如果将标签上的文本更改为固定宽度的字体,它将正常工作。虽然它看起来不太好,所以我真的很想要一个适用于非固定宽度字体的解决方案。
【问题讨论】:
标签: string perl user-interface truncate tkx