繁体   English   中英

用户单击后关闭图像(Python和枕头)

[英]Closing an Image After User Clicks (Python and Pillow)

我正在使用Python进行“自行选择冒险”游戏。 每隔一段时间,我希望为用户提供一个场景,并允许其在该场景中找到对象。 他们发现的任何东西都可以放入他们的库存中,每当他们准备停止寻找物品时,都可以点击左下角的“退出”按钮。 但是,我在实际获取按钮单击坐标以实际执行某事时遇到一些错误。

到目前为止,我有这个:

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)

用户单击一组特定的坐标(或其附近的某个位置)后,我希望程序从屏幕上清除图片并继续执行该程序。 为了方便起见,单击(300,400)至(500,500)的任意位置将关闭图片,并继续执行程序的其余部分。 我知道这会使用某种形式的循环

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

但是我不确定清除图像的实际操作。 我读到有关使用.kill()和.terminate()之类的东西的信息,但是它们在这种情况下不起作用。

有任何想法吗?

您需要为该图像提供参考,以便以后能够按照以下方式将其删除:

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

然后在您致电时:

imageIQ1.delete(canvImg)

它将被删除。


基于此,您可以将其放入事件方法中,例如:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM