【发布时间】:2023-02-07 01:38:18
【问题描述】:
我希望用户能够编辑画布文本项。由于 canvas-text 项目的功能比 text-widget 少,我想使用 text-widget 进行编辑。因此,当开始编辑时,通过鼠标双击事件,我在画布文本项上打开一个新的画布窗口项,并在其中放置一个文本小部件。然后我将画布文本项的文本插入到文本小部件中。当然,文本小部件的插入光标现在位于文本小部件的末尾。但我希望它位于鼠标双击发生的位置。我怎样才能做到这一点?
这是我的代码:
import tkinter as tk
def edit_text(event):
coords = canvas.bbox(canvas_text)
text_ref = tk.Text(root, font=("Courier", 10))
canvas_window = canvas.create_window(coords[0], coords[1], window=text_ref, anchor="nw")
text_ref.bind("<Escape>", lambda event: store_edits(text_ref, canvas_window))
text_ref.insert("1.0", canvas.itemcget(canvas_text, "text"))
text_ref.focus_set()
def store_edits(text_ref, canvas_window):
canvas.itemconfig(canvas_text, text=text_ref.get("1.0", "end"))
canvas.delete(canvas_window)
del text_ref
root = tk.Tk()
canvas = tk.Canvas(root)
canvas.grid()
canvas_text = canvas.create_text(100, 100, text="aaa\n456\n123\n123\n456\n123\nbbb\n", font=("Courier", 10))
canvas.tag_bind(canvas_text, "<Double-Button-1>", edit_text)
root.mainloop()
我问,因为我相信我不是第一个遇到这个问题的人。
【问题讨论】:
标签: python tkinter mouseevent text-widget