python PIL image.show() 之后如何关闭

除了鼠标关闭之外,也可以通过进程来关闭。

使用psutil库,来检查进程process,可以在img.show()之前创建process的列表,show之后会新增一个process,如果知道新增的process的name直接:

for proc in psutil.process_iter():  # 遍历当前process
    if proc.name() == "display":  # 如果process的name是display
        proc.kill()  # 关闭该process

如果不知道process的name:

process_list = []
for proc in psutil.process_iter():
    process_list.append(proc)

im.show()
for proc in psutil.process_iter():
    if not proc in process_list:
        proc.kill()

 来自:https://stackoverflow.com/questions/6725099/how-can-i-close-an-image-shown-to-the-user-with-the-python-imaging-library

如果使用matplotlib库里的pyplot来显示PIL image(上面是使用系统默认的图片浏览器显示,这里是使用matplotlib调用的tk),可以使用plt.ion() 和 plt.pause(15)来避免使用plt.show():

import matplotlib.pyplot as plt
from PIL import Image
img = Image.open("filepath")  # 打开图片,返回PIL image对象

plt.figure(figsize=(4, 4))
plt.ion()  # 打开交互模式
plt.axis('off')  # 不需要坐标轴
plt.imshow(img)

mngr = plt.get_current_fig_manager()
mngr.window.wm_geometry("+380+310")  # 调整窗口在屏幕上弹出的位置
plt.pause(15)  # 该句显示图片15秒
plt.ioff()  # 显示完后一定要配合使用plt.ioff()关闭交互模式,否则可能出奇怪的问题

plt.clf()  # 清空图片
plt.close()  # 清空窗口

如果想让图片一直显示,而不是在15秒后消失,可以使用变量控制:

while pausing:
    plt.pause(0.05)

即用pausing控制显示,如果不需要再显示,可以在函数外部将pausing改为False即可。

猜你喜欢

转载自blog.csdn.net/ygfrancois/article/details/84781087