Python 如何在Tkinter/TkinterDnD中按event.x_root和event.y_root设置文本小部件插入光标

Python 如何在Tkinter/TkinterDnD中按event.x_root和event.y_root设置文本小部件插入光标,python,tkinter,Python,Tkinter,我想在我的文本编辑器中实现文本拖放功能。到目前为止,我通过event.data获得了我丢弃的文本,以及通过event.x\u root和event.y\u root丢弃文本的位置。请帮助我设置tk.Text的插入光标的放置位置 我将用作扩展和包装器 这是我的密码: import tkinter as tk import TkinterDnD2.TkinterDnD as tkdnd def drop(event): print("x: %d"%event.x_ro

我想在我的文本编辑器中实现文本拖放功能。到目前为止,我通过
event.data
获得了我丢弃的文本,以及通过
event.x\u root
event.y\u root
丢弃文本的位置。请帮助我设置tk.Text的插入光标的放置位置

我将用作扩展和包装器

这是我的密码:

import tkinter as tk
import TkinterDnD2.TkinterDnD as tkdnd


def drop(event):
    print("x: %d"%event.x_root, "y: %d"%event.y_root, "text:'%s'"%event.data)


root = tkdnd.Tk()
text = tk.Text(root, width=50, height=10)
text.pack()
text.drop_target_register("DND_Text")
text.dnd_bind('<<Drop:DND_Text>>', drop)
root.mainloop()

现在,我正在努力研究如何将位置从像素比例转换为字符比例,以便将其设置为文本小部件的插入光标,并将文本插入到文本小部件中


或者,我可以在某个位置发出
事件吗?如果是这样,我该怎么做呢?

您可以使用
@x,y
格式通过坐标指定索引。从经典

@x,y 指示覆盖像素的字符,该像素在文本窗口中的x和y坐标为x和y

您应该将事件x和y用于小部件,而不是根。这是
文本
小部件的标准、文档化功能。您可以使用f字符串创建索引,如下所示:

index = f"@{event.x},{event.y}"
以上将产生类似于“@100200”的结果

您可以在任何采用索引的方法调用中使用该索引。要将其转换为数字索引,可以将其传递给
index
方法。例如:

numerical_index = text.index(index)

您应该能够使用
“@60306”
作为
.insert()
的第一个参数,直接将文本放置在放置位置。@jasonharper您好,
“@60306”
是什么意思?我在谷歌上没有得到这个字符串的任何结果。谢谢你的回答!但是对于
event.x
event.y
它抛出了一个异常:
AttributeError:'DnDEvent'对象没有属性“x”
@EricKwok:啊,我没有意识到这一点。我想您必须查阅文档,看看它有哪些属性。这似乎与其他事件不一致。无论如何,解决方案是对索引使用
@x,y
格式,对
@x,y
解决方案再次使用hanks。我将通过
x_根
y_根
:)计算精确坐标
numerical_index = text.index(index)