オブジェクト操作

import tkinter as tk
from PIL import Image, ImageTk

ここにイベントが発生したときの処理

pressed_x = pressed_y = 0
item_id = -1
def pressed(event):
global pressed_x, pressed_y, item_id
item_id = canvas.find_closest(event.x, event.y)
tag = canvas.gettags(item_id[0])[0]
item = canvas.type(tag)
#print (item)
#print (tag)
pressed_x = event.x
pressed_y = event.y

def dragged(event):
global pressed_x, pressed_y, item_id
item_id = canvas.find_closest(event.x, event.y)
tag = canvas.gettags(item_id[0])[0]
item = canvas.type(tag) # rectangle image
delta_x = event.x - pressed_x
delta_y = event.y - pressed_y
if item == "rectangle":
x0, y0, x1, y1 = canvas.coords(item_id)
canvas.coords(item_id, x0+delta_x, y0+delta_y, x1+delta_x, y1+delta_y)
else:
x, y = canvas.coords(item_id)
canvas.coords(item_id, x+delta_x, y+delta_y)
pressed_x = event.x
pressed_y = event.y

root = tk.Tk()
canvas = tk.Canvas(root, width=1300, height=1300, bg="white")
canvas.pack()

図形

canvas.create_rectangle(100, 100, 120, 120, fill="red", tags="rect")

画像

img = Image.open("point.png")
tkimg = ImageTk.PhotoImage(img)
canvas.create_image(200, 200, image=tkimg, tags="img")

ここにオブジェクトとイベントを結びつける

クリックされたとき

canvas.tag_bind("rect", "<ButtonPress-1>", pressed)
canvas.tag_bind("img", "<ButtonPress-1>", pressed)

ドラッグされたとき

canvas.tag_bind("rect", "<B1-Motion>", dragged)
canvas.tag_bind("img", "<B1-Motion>", dragged)
root.mainloop()

この記事が気に入ったらサポートをしてみませんか?