gpt4 book ai didi

python - 如何在 Tkinter 中移动 Canvas 内的文本

转载 作者:行者123 更新时间:2023-12-02 02:30:58 24 4
gpt4 key购买 nike

我在 Canvas 内相对于鼠标光标移动文本时遇到问题。

使用鼠标按钮 1 单击文本,然后拖动鼠标时,整个 Canvas 会移动,而不是其中的文本

我应该做什么来纠正这个问题?

这是我的代码:

from tkinter import* 
import tkinter as tk

root = Tk()
root.geometry('1000x600+500+100')
root.resizable(False,False)

def drag_start(event):
widget = event.widget
widget.startX = event.x
widget.startY = event.y

def mov(event):
widget = event.widget
x = widget.winfo_x() - widget.startX + event.x
y = widget.winfo_y() - widget.startY + event.y
canvas.move(obj,x,y)
canvas.update()

canvas=Canvas(root,width=
800,height=600,bg="red")

canvas.pack(fill=BOTH,
expand=1)

obj=canvas.create_text(100,
50,text="Object",fill=
'blue',font=('Gotham Medium',30,"bold"),anchor="nw")

canvas.tag_bind(obj,"<Button-1>",drag_start)
canvas.tag_bind(obj,'<B1-Motion>',mov)

root.mainloop()

最佳答案

由于 canvas.move() 是相对于之前的位置,因此您需要更新之前的位置(startXstartY):

def drag_start(event):
widget = event.widget
widget.startX, widget.startY = event.x, event.y

def mov(event):
widget = event.widget
widget.move(obj, event.x-widget.startX, event.y-widget.startY)
widget.startX, widget.startY = event.x, event.y # update previous position

或者使用canvas.coords():

def drag_start(event):
widget = event.widget
x, y = widget.coords(obj)
# save the offset of the click position from the obj's top-left corner
widget.dx, widget.dy = event.x-x, event.y-y

def mov(event):
widget = event.widget
widget.coords(obj, (event.x-widget.dx, event.y-widget.dy))

关于python - 如何在 Tkinter 中移动 Canvas 内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65033543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com