我有一个程序和几个我在程序中使用的照片。
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的内部文件)。也许有办法让它们从文件夹中消失并进入程序。
感谢名单。
答案 0 :(得分:3)
Qt正在使用resource系统执行此任务。 pyqt也支持这一点。这里有一些关于SO的答案:here和here
这是一个简单的例子:
首先,创建一个资源文件(例如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