2017-12-01 85 views
0

私は、画像の座標を変数として使用して特定のことを行うコードを作成しています。ユーザーのクリック後に画像を閉じる(PythonとPillow)

これまでのところ、私はこれを持っている:ユーザーが(あるいはどこか近く)の座標の特定のセットをクリック

root = Tk() 
imageIQ1 = Canvas(root, width=1000, height=1000) 
imageIQ1.pack() 
original = Image.open("prison.jpg") 
original = original.resize((1000,1000)) #resize image 
img = ImageTk.PhotoImage(original) 
imageIQ1.create_image(0, 0, image=img, anchor="nw") 

def getcoors(eventcoors): 
    global x0,y0 
    x0 = evencoors.x 
    y0 = evencoors.y 
    print(x0,y0) 

した後、私はプログラムが画面から画像を消去し、プログラムを続行します。

while (x not in range) and (y not in range): 

私は実際に画像を消去するために何をするのかは分かりません。私は.kill()や.terminate()のようなものを使用していますが、このような状況では動作しません。

アイデア?

+0

あなたにも輸入を含めることができます? – Nae

+0

私はPILインポートから使用していますImage、ImageTk – HunBurry

答えて

1

はあとのようにそれを削除できるようにするために、画像のための参照を持っている必要があります:あなたが呼び出すときに

canvImg = imageIQ1.create_image(0, 0, image=img, anchor="nw") 

と:

imageIQ1.delete(canvImg) 

それが削除されます。 thisに基づいて


次のようなイベントメソッドでそれを置くことができます:あなたの最終的なコードは次のようになります

def motion(event): 
    x, y = event.x, event.y 

    someSpecificX = 142 
    someSpecificY = 53 
    marginX = 100 
    marginY = 100 
    print(x, y) 

    if x in range(someSpecificX - marginX, someSpecificX + marginX): 
     if y in range(someSpecificY - marginY, someSpecificY + marginY): 
      imageIQ1.delete(canvImg) 

imageIQ1.bind('<Button-1>', motion) 

from tkinter import * 
from PIL import ImageTk, Image 

root = Tk() 
imageIQ1 = Canvas(root, width=1000, height=1000) 
imageIQ1.pack() 
original = Image.open("prison.jpg") 
original = original.resize((1000,1000)) #resize image 
img = ImageTk.PhotoImage(original) 
canvImg = imageIQ1.create_image(0, 0, image=img, anchor="nw") 

def motion(event): 
    x, y = event.x, event.y 

    someSpecificX = 142 
    someSpecificY = 53 
    marginX = 100 
    marginY = 100 
    print(x, y) 

    if x in range(someSpecificX - marginX, someSpecificX + marginX): 
     if y in range(someSpecificY - marginY, someSpecificY + marginY): 
      imageIQ1.delete(canvImg) 


imageIQ1.bind('<Button-1>', motion) 

root.mainloop() 
+0

おそらく[tag_bind()](http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.tag_bind-method)の例を作成します – furas

+0

@furas私はよく知られていませんそれで、感謝して読んでいます。 – Nae

+1

新しいことを学ぶ機会です:) – furas

関連する問題