如何使用Tkinter / Python将矩形移动到鼠标位置?

时间:2017-10-23 00:46:26

标签: python tkinter move rectangles

我正在使用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()

2 个答案:

答案 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()