(此问题基于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.4
和2.4 1.4
。看起来结果取决于编码每个字符所需的字节数。
应该这样吗?它是在某处记录的吗?
答案 0 :(得分:0)
你用的是什么字体?您使用的是什么样的Tk补丁版本? (应通过puts [package require Tk]
报告。)
我认为当按行进行索引移动时,文本小部件当前使用字符宽度来计算实际运动。 在过去的版本之间发生了变化。问题是不同的代码需要不同的东西:有时你想要可见的运动(例如,当处理用户的光标运动时,特别是设置了标签),有时你想要字符空间运动(这是你似乎期待的是什么。)
Tk不应该使用unicode字符的字节宽度做任何事情(你可以看到)。它真的应该透明地处理它(至少对于Basic Multilingual Plane中的任何字符;你可能会发现它之外的bug)。