代码之家  ›  专栏  ›  技术社区  ›  DarenW

pil的image.show()显示*两个*不同的查看器

  •  2
  • DarenW  · 技术社区  · 16 年前

    当在python shell中处理图像时,我使用image.show(),其中image是图像的一个实例。很久以前什么也没发生,但是在定义了一个名为“XV”的幻影的符号链接之后,我很高兴。

    最后几天,show()将同时显示ImageMagick的显示和幻影。尚不清楚show()从何处获取有关运行内容的信息。文档没有帮助。如何让它行为举止,只提出它认为是XV?

    6 回复  |  直到 16 年前
        1
  •  3
  •   Lie Ryan Bryan    16 年前

    嗯,首先,im.show只用于调试目的,它不能保证工作正常。

    不过,您可以始终查看源代码(打开“pydoc pil”,文件部分指出模块的位置):

    在Windows中,PIL将使用“开始/等待文件名”

    在Mac中,它使用“open-a/applications/preview.app”

    在Linux上,如果找到“display”,或者“xdg open”。

        2
  •  4
  •   Ricardo Crudo    14 年前

    有点过时,但是… 我解决了更改文件代码的问题 /usr/lib/python2.7/dist-packages/PIL/ImageShow.py . 丢失了 return 方法论 show 属于 Viewer 等级(靠近66号线): return self.show_image(image, **options) .

        3
  •  1
  •   Ariel Cabib    11 年前

    我发现了一种变通办法。

    我用过:

    image.save('something.png')
    

    使用默认预览程序从文件管理器打开PNG。 每次我打电话 save 再次,预览器自动刷新,我得到了新的图像:)

        4
  •  0
  •   mykhal    16 年前

    它可以将查看器指定为 command 论据 show 方法,例如

    img.show(命令='feh')

        5
  •  0
  •   Michael W    13 年前

    我也遇到了同样的问题,这是PIL中的一个问题。您可以通过以下方式更改PIL代码:

    在文件imageshow.py replace中

    return "start /wait %s && del /f %s" % (file,file) 
    

    具有

    return "start /wait %s && del /wait /f %s" % (file,file)
    
        6
  •  0
  •   Leo B    8 年前

    ImageShow 在中具有受支持和可用的查看器列表 ImageShow._viewers . 在我的盒子里,有两个观众:

    >>> import PIL.ImageShow
    >>> PIL.ImageShow._viewers
    [<PIL.ImageShow.DisplayViewer instance at 0x2587ef0>, <PIL.ImageShow.XVViewer instance at 0x2587f80>]
    

    不幸地 ImageShow.show() 使用所有可用的查看器。这样会显示两个窗口。

    解决方案是将查看器注册表减少为仅第一个可用的查看器:

    >>> PIL.ImageShow._viewers = [ PIL.ImageShow._viewers[0] ]