前提
Pythonでpillowとtkinterを用い、画面クリックで画像が回転するコードを作成しています。
ランダムな角度で回転を止めた際、「画面が何度傾いたか」という情報を抽出したいと模索しています。
過去の質問 (https://teratail.com/questions/162074) を参考にしましたが、解決に至りませんでした。
実現したいこと
張り付けたpngファイルの座標を取得することで、回転角度を算出できるようにしたいと考えています。
座標の取得にこだわっているわけではなく、
「正確に何度傾いているか」を求めることが重要なので、
別のアイデアがありましたら、参考にさせてください。
発生している問題・エラーメッセージ
・'Canvas' object has no attribute 'key_bind'
・'Canvas' object has no attribute 'cords'
Python
1 2#---SVV測定に使用する画像の作成--- 3 4from PIL import Image, ImageDraw 5 6#背景色が黒色のキャンパスを作成。 7im = Image.new('RGB', (500, 500), (0, 0, 0)) 8draw = ImageDraw.Draw(im) 9 10#中央に線を描画 11draw.line((50, 250, 450, 250), fill=(255, 255, 255), width=10) 12 13#同じサイズの画像を作成 14im_clear = Image.new("RGBA", im.size, (0, 0, 0, 0)) 15width = im.size[0] 16height = im.size[1] 17 18for x in range(width): 19 for y in range(height): 20 pixel = im.getpixel( (x, y) ) 21 22 # 黒なら処理しない 23 if pixel[0] == 0 and pixel[1] == 0 and pixel[2] == 0: 24 continue 25 26 # 黒以外なら、用意した画像にピクセルを書き込み 27 im_clear.putpixel( (x, y), pixel ) 28 29#SVVで表示させるバーをpng形式で保存 30im_clear.save("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png", quality=100) 31 32#---測定コード--- 33 34import tkinter as tk 35from PIL import Image, ImageTk 36 37 38#画面サイズの指定 39WIDTH = 1300 40HEIGHT = 800 41 42#新規ウィンドウを作成 43root = tk.Tk() 44canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="black") 45canvas.pack() 46 47#ウィンドウにSVV画像を貼り付け 48img = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png") 49img = img.rotate(0) 50tkimg = ImageTk.PhotoImage(img, width=WIDTH, height=HEIGHT) 51canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 52 53#回転角度を取得するためのリストを作成 54List = [] 55 56 57#イベントが発生したときの処理 58def press_L(event): 59 #左クリックで、画像を左回転させる 60 global img 61 global tkimg 62 img = img.rotate(10) 63 tkimg = ImageTk.PhotoImage(img) 64 canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 65 66def press_R(event): 67 #右クリックで、画像を右回転させる 68 global img 69 global tkimg 70 img = img.rotate(-10) 71 tkimg = ImageTk.PhotoImage(img) 72 canvas.create_image(WIDTH/2, HEIGHT/2, image=tkimg, anchor="center", tags="img") 73 74def coordinate(event): 75 #Enterキーを押した時点の、回転角度を取得したい 76 for id in canvas.find_all(): 77 tag = canvas.itemcget(id, "tags") 78 if tag.startswith("img"): 79 List.append({tag:canvas.cords(id)}) 80 print(List) 81 82 83#左クリックで呼び出すイベント 84canvas.tag_bind("img", "<ButtonPress-1>", press_L) 85 86#右クリックで呼び出すイベント 87canvas.tag_bind("img", "<ButtonPress-3>", press_R) 88 89#Enterキーで呼び出すイベント 90canvas.key_bind("img", "<Return>", coordinate) 91 92 93#メインループ 94root.mainloop()
試したこと
上記のコードを実行したところ「'Canvas' object has no attribute 'key_bind'」のエラーメッセージが返ってきました。
key_bindに対応していないとのことなので、
ひとまず右クリックでcoordinateイベントを呼びだすコードを試したところ、
「'Canvas' object has no attribute 'cords'」というエラーメッセージが返ってきました。
補足情報(FW/ツールのバージョンなど)
AnacondaからPythonを使用しています。

回答1件
あなたの回答
tips
プレビュー