使用QPixmap加载图像

时间:2011-05-10 16:36:07

标签: python qt pyside

我有一个图像文件,C:/44637landscapes-2007.jpg

我想使用PySide

使用QPixmap加载此文件

我尝试了以下。

pixmap = QPixmap('C:/44637landscapes-2007.jpg')

但文档说像QPixmap(':/xxxxxx.jpeg')':'的含义是什么?

如何在'C:\'处加载图片?

编辑:问题在于尝试加载"JPEG"。它能够加载"PNG",没有任何问题。那么还有什么需要加载"JPEG"

由于 Jijoy

3 个答案:

答案 0 :(得分:4)

您可以通过提供文件的路径名来构造QPixMap的实例。尝试代码时出现的错误是什么?将您的代码更改为:

pixmap = QPixMap(r'C:\filename.jpeg')

您所指的文档是加载Qt资源的方式。可以将应用程序所需的图像转换为Qt资源,以便以独立于平台的方式加载它。有关执行此操作的步骤,请参阅The Qt Resource System 文档。

答案 1 :(得分:4)

Qt对图像做了一些有点奇怪的事情。如果你只使用png,你将永远不会有问题。处理其他图像格式的方式略有不同。

如果您查看Qt目录(所有二进制文件和源代码所在的位置),您将找到一个名为plugins\imageformats的目录

在该目录中,Qt支持的每种图像格式都有大量的dlls(或.so)。在你的情况下,我认为你感兴趣的是qjpeg4.dll

现在,当您运行应用程序并尝试使用jpeg时,Qt会尝试加载此插件,但如果找不到它,则您的图像将不会显示。

我们在ico文件中遇到了类似的问题。它在我们的开发环境中工作,因为Qt文件夹在我们的PATH,中,因此它神奇地发现了这个插件。但是,当我们发布我们的软件时,我们只分发我们需要的那些dll,因此它不起作用。

经过多次调查,这就是我们所做的:

  • 我们的应用程序位于bin /目录中。这是exe和所有Qt dll的放置位置。 QtCore4.dllQtGui4.dll等......

  • 在bin目录下,我们创建了一个名为'imageformats'

  • 的子目录
  • 放置qjpeg4.dll以及您可能需要的任何其他图片插件。

  • 更改代码如下:

    QApplication _App(argc, argv);

    // Find the path of your bin directory - whereever your exe resides.

    QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");

    // This line is providing a path to Qt telling it to look here for plugins QApplication::addLibraryPath(_Path);

    // Initialize the main form

    return _App.exec();

    这应该确保Qt知道jpeg处理插件,并将您的图片加载到UI

答案 2 :(得分:3)

如果您正在尝试将Python代码构建为可执行文件,则会解决.ico文件的问题,但JPEG的过程相同: PyQt/PySide - icon display

如果从安装的解释器运行时遇到问题,那么路径变量可能没有正确设置,你的qt.conf(在基础python目录中)已被删除/更改,或者你没有qjpeg4。 dll应该在哪里(<python dir>\Lib\site-packages\PySide\plugins\imageformats)。

我的qt.conf看起来像:

[Paths]
Prefix = C:/Python27/lib/site-packages/PySide
Binaries = .
Plugins = plugins
Translation = translation

C:/Python27/lib/site-packages/PySide是我的系统PATH变量的一部分,并且是任何PyQt(或其他Qt)目录的提前