我正在使用Tkinter / Python的Canva类'coord()方法来移动矩形。我应该通过什么作为参数才能使其发挥作用?
from tkinter import *
root = Tk()
def key(event):
print ("pressed", repr(event.char))
def callback(event):
position = (event.x,event.y)
event.widget.coords(item, position)
canvas= Canvas(root, width=100, height=100)
canvas.bind("<Key>", key)
canvas.bind("<Button-1>", callback)
item = canvas.create_rectangle(10,10,5,5)
canvas.pack()
答案 0 :(得分:0)
这似乎是你的第一篇文章。欢迎来到SO:D
更新回答:经过一些研究和测试后,您似乎只需要在没有元组的情况下传递coordenates。将x和y存储在元组中是一个问题,但也没有提供x2和y2的值。
def callback(event):
event.widget.coords(item, event.x + 5, event.y + 5, event.x, event.y)
您可以了解更多here
原来的错误答案:
你不能在tk上移动物品。也许尝试清理画布并在新坐标处创建物品。
canvas.delete("all")
canvas.create_rectangle(event.x + 5,event.y + 5, position)
答案 1 :(得分:0)
from tkinter import *
import pyautogui
def on_move(event):
component=event.widget
locx, locy = component.winfo_x(), component.winfo_y()
w , h =master.winfo_width(),master.winfo_height()
mx ,my =component.winfo_width(),component.winfo_height()
xpos=(locx+event.x)-(15)
ypos=(locy+event.y)-int(my/2)
if xpos>=0 and ypos>=0 and w-abs(xpos)>=0 and h-abs(ypos)>=0 and xpos<=w-5 and ypos<=h-5:
component.place(x=xpos,y=ypos)
return
master = Tk()
master.geometry("%dx%d+0+0" % (500,500))
msg = Label(master, text = "Click & Move")
msg.config(bg='lightgreen', font=('times', 24, 'italic'))
msg.bind('<B1-Motion>',on_move)
msg.place(x=10,y=20)
mainloop()