drakide
drakide

Reputation: 31

tkinter: dragging widgets

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

Answers (1)

msw
msw

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

Related Questions