プロが教えるわが家の防犯対策術!

画面に新規ウィンドウを立ち上げてからpngファイルを貼り付け、
クリックごとに少しづつpngファイルを回転させるコードを作成しています。

エラーメッセージは表示されませんが、
クリックしても画面が回転しません。

イベントの内容をテキストのプリントに変換したところ動作したので、
rotateを含むイベントの呼び出しに失敗しているのだと思われます。
解決方法が分からずに困っているので、
教えていただけると幸いです。
コードは以下の通りになります。

import tkinter as tk
from PIL import Image, ImageTk

#イベントが発生したときの処理
def press_L(event):
global img
img = img.rotate(10)
tkimg = ImageTk.PhotoImage(img)
canvas.create_image(250, 250, image=tkimg, tags="img")

def press_R(event):
global img
img = img.rotate(-10)
tkimg = ImageTk.PhotoImage(img)
canvas.create_image(250, 250, image=tkimg, tags="img")

#新規ウィンドウを作成
root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500, bg="black")
canvas.pack()
img = Image.open("D:\EXPERIMENT\programming\Python\SVV\svv_bar.png")
tkimg = ImageTk.PhotoImage(img, width=500, height=500)
canvas.create_image(250, 250, image=tkimg, tags="img")

#左クリック
canvas.tag_bind("img", "<ButtonPress-1>", press_L)

#右クリック
canvas.tag_bind("img", "<ButtonPress-3>", press_R)

#メインループ
root.mainloop()

A 回答 (2件)

tkimgもグローバルにしないと駄目。



描面はmainloopの中で行なわれるので
tkimgの寿命がmainloopに届かないと、
イメージは描画されません。
    • good
    • 0

グローバル変数



tkimg_list = []

でも設定して、press_L、press_R本体内のcanvas.create_imageの前に

tkimg_list.append(tkimg)

と言う一文を挿入してください。
「pythonで、tkinterとpill」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!