用户点击后关闭图像(Python 和 Pillow)
Closing an Image After User Clicks (Python and Pillow)
我正在 Python 开发一款自选冒险游戏。每隔一段时间,我希望给用户一个场景,并允许用户在该场景中找到对象。他们找到的任何东西都可以放入他们的库存中,每当他们准备好停止寻找物品时,他们可以点击左下角的 "Exit" 按钮。但是,我 运行 在实际获取按钮单击坐标以实际执行某些操作时遇到了一些错误。
到目前为止,我有这个:
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)
它将被删除。
基于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()
我正在 Python 开发一款自选冒险游戏。每隔一段时间,我希望给用户一个场景,并允许用户在该场景中找到对象。他们找到的任何东西都可以放入他们的库存中,每当他们准备好停止寻找物品时,他们可以点击左下角的 "Exit" 按钮。但是,我 运行 在实际获取按钮单击坐标以实际执行某些操作时遇到了一些错误。
到目前为止,我有这个:
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)
它将被删除。
基于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()