[python] Tkinter 드래그 앤 드롭 처리

Tkinter는 Python에서 GUI 프로그래밍을 위한 표준 라이브러리이며, 많은 기능을 제공합니다. 그 중에 하나가 드래그 앤 드롭 기능입니다. 드래그 앤 드롭은 사용자가 마우스로 객체를 이동하거나 복사하는 동작을 말하며, Tkinter를 사용하여 이를 처리할 수 있습니다.

드래그 앤 드롭 이벤트와 처리

Tkinter에서는 bind() 메서드를 사용하여 위젯에 이벤트 처리기를 연결할 수 있습니다. 드래그 앤 드롭을 처리하기 위해서는 다음과 같은 이벤트를 사용할 수 있습니다.

드래그 앤 드롭을 처리하기 위해서는 위젯에서 <Button-1> 이벤트에서 시작하여 <B1-Motion> 이벤트로 이동하고, 마지막으로 <ButtonRelease-1> 이벤트를 사용하여 완료합니다.

드래그 앤 드롭 예제

다음은 Tkinter를 사용하여 드래그 앤 드롭을 처리하는 간단한 예제 코드입니다.

import tkinter as tk

def start_drag(event):
    # 드래그 시작
    widget = event.widget
    widget.start_drag_data = {'x': event.x, 'y': event.y}

def drag(event):
    # 드래그 중
    widget = event.widget
    x = widget.winfo_x() - widget.start_drag_data['x'] + event.x
    y = widget.winfo_y() - widget.start_drag_data['y'] + event.y
    widget.place(x=x, y=y)

def end_drag(event):
    # 드래그 완료
    widget = event.widget
    widget.start_drag_data = {}

# 윈도우 생성
window = tk.Tk()

# 드래그할 라벨 위젯 생성
label = tk.Label(window, text="드래그 앤 드롭")
label.bind("<Button-1>", start_drag)
label.bind("<B1-Motion>", drag)
label.bind("<ButtonRelease-1>", end_drag)
label.pack()

# 윈도우 실행
window.mainloop()

위 예제 코드는 Tkinter를 사용하여 라벨 위젯을 드래그 앤 드롭할 수 있는 기능을 추가한 것입니다. <Button-1> 이벤트에서는 드래그 시작점을 저장하고, <B1-Motion> 이벤트에서는 드래그 중인 위치로 위젯을 이동시키고, <ButtonRelease-1> 이벤트에서는 드래그 동작을 종료합니다.

이와 같은 방식으로 Tkinter를 활용하여 드래그 앤 드롭 기능을 구현할 수 있습니다.

참고 자료