在文本小部件中设置光标位置

14 投票
3 回答
25747 浏览
提问于 2025-04-16 01:04

在Tkinter的文本框里,可以设置光标的位置吗?我还没找到什么特别有用的资料。

我目前能做到的就是在某个x-y坐标上发出一个<Button-1><ButtonRelease-1>事件,但这个坐标是以像素为单位的,而不是以字母为单位的。

3 个回答

2

这个属性只适用于文本小部件(Text Widget),因为对于输入小部件(Entry Widget),我们可以使用:

entry_widget_name.icursor("position")

而对于文本小部件,我们会使用:

text_widget_name.mark_set("insert", "%d.%d" % (x,y))

这里的 x 是行的位置,y 是列的位置。

(使用带小数点的整数,比如 1.0 或 3.0 这样的格式)

9

要设置光标的位置,你可以使用 text_widget.mark_set 这个方法。第一个参数是 "insert"(或者用 Tkinter.INSERT 作为常量),第二个参数可以有很多种形式,最常用的有:

  • "%d,%d" % (line, column),这里的 line 是从 1 开始计数的,而 column 是从 0 开始计数的
  • "1.0+%d chars" % index,这里的 index 也是从 0 开始计数,就像 Python 中字符串的索引一样

如果你想获取某个标记的位置,可以使用 text_widget.index 这个方法:

text_widget.index(Tkinter.INSERT)
12

如果“text”、“line”和“column”是你的文本对象,那么你想要的文本行和列变量分别是:

text.mark_set("insert", "%d.%d" % (line + 1, column + 1))

如果你不想关心行号……那你就得关心。

完整的文档可以在 Tkinter文本小部件 找到。

撰写回答