【问题标题】:PyQt4 jpeg/jpg unsupported image formatPyQt4 jpeg/jpg 不支持的图像格式
【发布时间】:2012-05-15 15:58:10
【问题描述】:

我正在尝试让 QImage(或 PyQt4 中的任何内容)在脚本中加载 jpg 文件。我还没有找到任何关于如何让它将 jpg 图像作为脚本加载的信息,很多使用 py2exe 进行编译,但我什至无法做到这一点。

花了一些时间来解决这个问题,我关注了一些没有可用的东西。查看我的 site-packages/PyQt4/plugins/imageformats 文件夹:

qgif4.dll, qico4.dll,qjpeg4.dll, qmng4.dll, qsvg4.dll, qtga4.dll, qtiff4.dll

根据QtGui.QImageReader.supportedImageFormats(),这是我安装的pyqt4可以使用的

[PyQt4.QtCore.QByteArray('bmp'), PyQt4.QtCore.QByteArray('pbm'), PyQt4.QtCore.QByteArray('pgm'), PyQt4.QtCore.QByteArray('png'), PyQt4.QtCore.QByteArray('ppm'), PyQt4.QtCore.QByteArray('xbm'), PyQt4.QtCore.QByteArray('xpm')]

我还确保我的 qt.conf 文件位于 python 主目录中并且它有这个

[路径]

Prefix = C:/Python27/Lib/site-packages/PyQt4
Binaries = C:/Python27/Lib/site-packages/PyQt4

我试过添加

Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins/imageformats
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins

没有运气

我在 windows 7 64b Home Premium 上运行 python 2.7.2,带有 PyQt4 4.9.1(均为 32b)。

我也尝试过版本 4.8.1 和 4.8.5(我手头有),但它们都不支持 jpg。我不知所措。如何让这些恢复得到支持?

【问题讨论】:

  • 奇怪。对我来说,在 OSX 上使用 py2app 打包时,这曾经是一个问题,但从来没有在脚本情况下。它总是设法正确找到插件。
  • 哇,不仅仅是JPEG,看来PyQt 无法加载任何dll 文件。你能试试Plugins = plugins吗?它不应该是完整路径。
  • 我尝试了插件,然后尝试了'/plugins'、'/plugins/imageformats'、'plugins/imageformats'。什么都没有。
  • 您是否尝试过简单地擦除您的 python 和 PyQt 安装并重新安装?大概这对大多数人都有效,所以除非你在代码中做一些奇怪的事情,否则你的安装可能只是搞砸了。
  • 我从他们各自的网站下载了最新的 python 2.7.3 msi 和 PyQt4 4.9.1 exe 安装程序,并将它们安装到以前没有安装它们的新机器上。新机也无法加载额外的图片格式

标签: python pyqt pyqt4 jpeg


【解决方案1】:

以防万一有人在搜索加载插件,我已经created an answer for a more proper question here 允许您基本上将插件放在任何网络共享文件夹中。

简而言之,使用QtCore.QCoreApplication.addLibraryPath() 代替qt.conf 文件。

【讨论】:

    【解决方案2】:

    似乎有两个不同的问题会导致这种情况。看起来我两个都遇到了。

    第一。我以“管理员身份”运行 PyQt4 安装程序,这似乎解决了部分问题。所以它需要以管理员身份运行才能让一切正常工作。

    第二。为了使所有插件正确加载,必须在加载任何类型的图像之前先创建 QApplication。

    所以

    app = QtGui.QApplication(sys.argv)
    

    需要先创建。

    我的脚本运行方式

    def main():
        app = QtGui.QApplication(sys.argv)
        win = window()
        win.display()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

    自从我以管理员身份安装 PyQt4 后,它并没有改变,但现在可以工作并加载 jpeg 和其他所有内容。

    我想做的是创建一个脚本,该脚本将由 PyQt4 应用程序调用,但它不会自行运行,因此无需先创建 QApplcation。这是我遇到问题#2的地方

    供参考:http://article.gmane.org/gmane.comp.python.pyqt-pykde/7176/match=jpeg+plugin+not+loading

    以管理员身份安装并始终创建 QApplication,即使您不需要它。

    如果您只是检查空闲时可用的内容:

    from PyQt4 import QtGui
    QtGui.QImageReader.supportedImageFormats()
    

    不会显示所有内容,仍需要运行

    from PyQt4 import QtGui
    import sys
    app = QtGui.QApplication(sys.argv)
    QtGui.QImageReader.supportedImageFormats()
    

    这很烦人,所以希望这对其他人有帮助。

    【讨论】:

    • 所以,我刚刚在 Windows 上使用 virtualenvs 遇到了这个问题(将 PyQt4 从全局站点包复制到 envs 站点包) - 我必须创建 qt.conf,就像在旁边的原始帖子中指定的那样Scripts\python.exe - 然后一切正常!
    • 如果有人知道如何在不创建 QApplication 的情况下加载插件,请在此处添加评论;对于我们这些只使用 QImage 作为实用图像加载类的人来说,这将非常有帮助。
    • 在我将 QApplication 调用放入 main 之前,我的无法工作。正如您展示的那样,它不适用于 main() 中的 QApplication。很奇怪,但消除使用 main() 为我解决了这个问题。
    猜你喜欢
    • 2014-06-18
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多