【问题标题】:python 3 how to put pics inside my programpython 3如何将图片放入我的程序中
【发布时间】:2015-05-07 05:41:56
【问题描述】:

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

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

图片与程序位于同一文件夹中。 有什么办法可以将图片放入程序中? (虽然它们只是在文件夹中,但它们可以很容易地更改或删除,我不希望它发生)

可能是这样的:

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

或任何其他方法。

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

谢谢。

【问题讨论】:

    标签: image python-3.x qt5 py2exe


    【解决方案1】:

    Qt 使用resource 系统来完成这项任务。 pyqt 也支持这一点。这里已经有一些答案了: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
    

    【讨论】:

    • 非常感谢!!!终于有人回复了!这正是我一直在寻找的。非常准确,完整且易于理解的答案。一切都很完美。 ))) images/image.png 行中的文件名和别名在哪里,但尝试后发现。
    • 顺便问一下,你知道大小会发生什么吗?我将 2 个文件放入一个资源(27 kb 和 8 kb)中,生成的 resource.py 文件为 150 kb。为什么?有没有办法让它变小?
    • rcc 中有一个option for compression 但我没试过。
    • 我试过了。没有效果。 pyrcc5 -compress 2 -o resources_rc.py resources.qrc 也尝试了从 1 到 10 的数字。完全没有效果。总是 150 kb。
    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2012-07-20
    相关资源
    最近更新 更多