python 3如何将pics放入我的程序中

时间:2015-05-05 08:21:12

标签: image python-3.x qt5 py2exe

我有一个程序和几个我在程序中使用的照片。

icon.addPixmap(QtGui.QPixmap("logo_p3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.label_6.setPixmap(QtGui.QPixmap("Logo-4.jpg"))

Pics与程序位于同一文件夹中。 有没有办法把照片放在程序中? (虽然它们只是在文件夹中,但可以轻松更改或删除,我不希望它发生)

可能是这样的:

k=b'bytes of pic here'
self.label_6.setPixmap(QtGui.QPixmap(k))

或任何其他方法。

我使用py2exe构建可执行文件(但即使使用选项'压缩':True - 我的2张图片就在文件夹中。他们不想进入exe的内部文件)。也许有办法让它们从文件夹中消失并进入程序。

感谢名单。

1 个答案:

答案 0 :(得分:3)

Qt正在使用resource系统执行此任务。 pyqt也支持这一点。这里有一些关于SO的答案:herehere

这是一个简单的例子:

首先,创建一个资源文件(例如resources.qrc)。

<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/images">
    <file alias="image.png">images/image.png</file>
</qresource>
</RCC>

然后将资源文件编译成python模块:

pyrcc5 -o resources_rc.py resources.qrc 

然后包含资源文件,当您创建像素图时,请使用资源符号。

from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QLabel
from PyQt5.QtGui import QPixmap
import resources_rc


class Form(QWidget):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        mainLayout = QGridLayout()
        pixmap = QPixmap(':/images/image.png') # resource path starts with ':'
        label = QLabel()
        label.setPixmap(pixmap)
        mainLayout.addWidget(label, 0, 0)

        self.setLayout(mainLayout)
        self.setWindowTitle("Hello Qt")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    screen = Form()
    screen.show()
    sys.exit(app.exec_())

这假设以下文件结构:

|-main.py           # main module
|-resources.qrc     # the resource xml file
|-resouces_rc.py    # generated resource file
|-images            # folder with images
|--images/image.png # the image to load