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)