Reputation: 31
I'd like to make a drag-n-drop function for a widget. The code is this:
from tkinter import *
root = Tk()
root.config(background = "red", width = 500, height = 500)
root.title("root")
def frameDrag(event):
frame.place(x = event.x , y = event.y)
frame = Frame(root, width = 60, height = 30)
frame.place(x=0, y=0)
frame.bind("<B1-Motion>", frameDrag)
root.mainloop()
Basically, it should place the widget to the location you move your mouse to. Instead, the widget jumps around all over the window. Any ideas how to fix this?
Upvotes: 3
Views: 1748
Reputation: 43527
It is jumping all over the place because you are telling it to as shown by:
def frameDrag(event):
print event.x, event.y
frame.place(x = event.x , y = event.y)
Better to use a canvas widget and better to use B1-Click and B1-Release events and compute the delta. Look for the widget demo that comes along with Tkinter.
Upvotes: 1