オブジェクト操作
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()
この記事が気に入ったらサポートをしてみませんか?