2017-12-01 4 views
0

저는 그림 좌표를 변수로 사용하여 특정 작업을 수행하는 코드를 만듭니다.사용자 클릭 후 이미지 닫기 (파이썬 및 베개)

지금까지, 나는이있다 : 사용자가 (또는 어딘가에 근처) 좌표의 특정 세트를 클릭

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()와 같은 것을 사용하는 것에 대해 읽었지 만,이 상황에서는 작동하지 않습니다.

아이디어가 있으십니까?

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

을 당신이 호출 할 때 다음 :

+0

당신이뿐만 아니라 수입을 포함 할 수 ? – Nae

+0

PIL 가져 오기에서 이미지를 사용하고 있습니다. ImageTk – HunBurry

답변

1

당신은 나중에로 삭제할 수하기 위해 이미지에 대한 참조가 필요

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