При использовании замечательной питоновской библиотеки PyQT для компиляции ресурсов (например файлов изображений) в код модуля применяется утилита, поставляемая вместе с библиотекой. Находится она в папке bin (а иногда в корне библиотеки) и называется pyrcc4.
В нашем случае давайте скомпилируем в ресурс файл изображения Qt-logo.png. Для этого выполним несколько несложных действий.
Создадим файл например res.qrc формата XML, описывающий ресурсы
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>Qt-logo.png</file> </qresource> </RCC>
Затем, нашей утилитой pyrcc4.exe (для Windows) сгенерим питоновский скрипт, содержащий наше изображение, например так:
pyrcc4 -o путь_до_файла\rc.py -py2 путь_до_файла\res.qrc
Осталось лишь экспортировать код в виде модуля и использовать в наших скриптах, например как показано ниже.
from PyQt4 import QtCore, QtGui import sys import rc app = QtGui.QApplication(sys.argv) window = QtGui.QWidget() window.setWindowTitle("Simple app with resource") window.resize(150, 100) image = QtGui.QPixmap(":/Qt-logo.png") label = QtGui.QLabel() label.setAlignment(QtCore.Qt.AlignCenter) label.setPixmap(image) button = QtGui.QPushButton("&Close") vbox = QtGui.QVBoxLayout() vbox.addWidget(label) vbox.addWidget(button) window.setLayout(vbox) QtCore.QObject.connect( button, QtCore.SIGNAL("clicked()"), QtGui.qApp, QtCore.SLOT("quit()") ) window.show() sys.exit(app.exec_())
Следует отметить, что размер файла ресурса значительно больше размера исходного изображения. Для уменьшения объема можно использовать компрессию.
7 комментариев:
Спасибо Вам! большое! Сколько не искал, ну никто, не удосужился написать примеры. Просто брали и тыкали в документацию в которой тоже ничего подобного не нашел. А тут бац, все просто, в одном месте, ничего лишнего.
.txt to .bat и готово.
Рад помочь
Черта с два так заработает!
В приведенном выше коде из rc ничего не подцепляется и label.Pixmap - будет прозрачным.
Сейчас перепроверил. У меня всё прекрасно работает. Давайте попробуем посмотреть на окружение: должно быть Windows, PyQt4 (хотя, думаю, и на других ОС и Qt5 тоже будет работать). Файл изображения должен называться одинаково во всех файлах (main.py, res.qrc) и попробуйте его для начала расположить там же, где исполняемый модуль.
К окружению: Python 2
Подскажите, а кроме картинок что можно упаковать? Можно текстовый файл, а потом читать его оттуда?
Любые файлы можно упаковывать.
Отправить комментарий