Tk文本小部件索引表达式和Unicode

时间:2017-05-19 19:53:11

标签: unicode tcl tk

(此问题基于that

让我们考虑以下代码:

package require Tk 8.6

pack [text .t]
.t insert end "abcdefgh\nабвгґдеє\n一伊依医咿噫欹泆"

puts "[.t index 1.4+1l] [.t index 1.4+2l]"
puts "[.t index 3.4-1l] [.t index 3.4-2l]"

exit 0

输出:

2.2 3.2
2.6 1.8

如果行足够长,我希望+1l-1l保留列,即打印2.4 3.42.4 1.4。看起来结果取决于编码每个字符所需的字节数。

应该这样吗?它是在某处记录的吗?

1 个答案:

答案 0 :(得分:0)

你用的是什么字体?您使用的是什么样的Tk补丁版本? (应通过puts [package require Tk]报告。)

我认为当按行进行索引移动时,文本小部件当前使用字符宽度来计算实际运动。 在过去的版本之间发生了变化。问题是不同的代码需要不同的东西:有时你想要可见的运动(例如,当处理用户的光标运动时,特别是设置了标签),有时你想要字符空间运动(这是你似乎期待的是什么。)

Tk不应该使用unicode字符的字节宽度做任何事情(你可以看到)。它真的应该透明地处理它(至少对于Basic Multilingual Plane中的任何字符;你可能会发现它之外的bug)。