我正在Tkinter上创建一个应用程序,它需要拖放图像。问题是,当图像被移动时,整个画布就被移动。为什么会发生这种情况,如何解决呢?


码
from tkinter import *
import os
root = Tk()
root.geometry("500x500")
mycanvas = Canvas(root, bg = 'red')
mycanvas.pack()
def cargarimg(archivo): # Se carga imagen
ruta = os.path.join('img', archivo)
imagen = PhotoImage(file = ruta)
return imagen
photo = cargarimg("Res.png")
a = mycanvas.create_image(100, 100, image = photo)
def drag_start(event):
widget = event.widget
widget.startX = event.x
widget.startY = event.y
def drag_motion(event):
widget = event.widget
x = widget.winfo_x() - widget.startX + event.x
y = widget.winfo_y() - widget.startY + event.y
widget.place(x=x,y=y)
mycanvas.tag_bind(a, '<Button-1>', drag_start)
mycanvas.tag_bind(a, '<B1-Motion>', drag_motion)
root.mainloop()发布于 2021-01-05 02:14:42
这是因为event.widget是画布,而不是图像项a。
您需要使用画布的方法move()或moveto()来移动图像项。下面是使用drag_motion()更新的move()
def drag_motion(event):
widget = event.widget
dx, dy = event.x-widget.startX, event.y-widget.startY
event.widget.move(a, dx, dy)
widget.startX, widget.startY = event.x, event.yhttps://stackoverflow.com/questions/65571801
复制相似问题