我试图用鼠标拖放在画布上移动一些带有文本的矩形。我使用 find_overlapping 选择要移动的矩形。这意味着最初作为类对象 Rect 的一部分创建的文本不会移动。有没有办法修改我的代码以移动类对象中的所有对象,或者使用 find_overlapping 查找类对象 ID?
矩形上的文本可以相同,如示例所示。用随机标签标记类对象中的所有元素以将它们分组在一起是我的第一个想法,但使用 find_ovelapping 检索此类标签信息并不成功。
import tkinter as tk
root=tk.Tk()
PAB=tk.Canvas(width=400, height=400)
#checks if a certain canvas object has a certain tag
def hastag(tag, id):
if any(tag in i for i in PAB.gettags(id)):return True
else:return False
class Rect:
def __init__(self, x1, y1, name):
rec = PAB.create_rectangle(x1,y1,x1+40,y1+40, fill='#c0c0c0', tag=('movable', name))
text = PAB.create_text(x1+20,y1+20, text=name)
#mouse click find object to move
def get_it(event):
delta=5
global cur_rec
for i in PAB.find_overlapping(event.x-delta, event.y-delta, event.x+delta, event.y-delta):
if hastag('movable', i):
cur_rec = i
PAB.bind('<Button-1>', get_it)
#mouse movement moves object
def move_it(event):
xPos, yPos = event.x, event.y
xObject, yObject = PAB.coords(cur_rec)[0],PAB.coords(cur_rec)[1]
PAB.move(cur_rec, xPos-xObject, yPos-yObject)
PAB.bind('<B1-Motion>', move_it)
#test rects
bob = Rect(20,20,'Bob')
rob = Rect(80,80,'Rob')
different_bob = Rect(160,160,'Bob')
PAB.pack()
root.mainloop()
谢谢。如果需要任何澄清,我很乐意提供帮助。