При использовании замечательной питоновской библиотеки 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
Подскажите, а кроме картинок что можно упаковать? Можно текстовый файл, а потом читать его оттуда?
Любые файлы можно упаковывать.
Отправить комментарий