是否可以将 tkinter 文本索引转换为坐标?

Is it possible to convert tkinter text index to coordinates?

我知道可以在 tkinter Text 小部件中将坐标转换为索引。但反过来也可能吗?

基本上,我想知道在按下鼠标按钮时鼠标坐标是在索引 "10.end" 的坐标之前还是之后(例如)。

行号可以是任何东西。由于鼠标正在按下但尚未释放,我无法使用 current.

如果您比较鼠标是在一个字符之前还是之后在另一个字符上,您不需要将索引转换为坐标来执行您想要的操作。您可以直接将索引与事件的 x,y 坐标进行比较:

def on_motion(event):
    event.widget.compare("@%s,%s" % (event.x, event.y), "10.end")
...
text = tk.Text(...)
text.bind("<B1-Motion>", on_motion)

如果你想比较鼠标是在另一个角色的左边还是右边(不管 y 坐标),你唯一的选择是获取角色的 x,y 并自己进行比较。

为此,您可以使用文本小部件的 bbox 方法来获取特定索引的以像素为单位的边界框。您将返回索引左上角的 x/y,以及宽度和高度。然后,您可以将事件的 x 坐标与索引的 x 坐标进行比较。