【问题标题】:Make PyQt resources available to other Python classes使 PyQt 资源可用于其他 Python 类
【发布时间】:2015-05-15 17:49:22
【问题描述】:

我正在使用 PyQt 开发一个 GUI,我想使用 PyQt 资源系统来跟踪我的资源(图像、模板等)。我正在尝试找到一种方法来获取资源的绝对路径,以便可以使用非 PyQt 类加载它们。例如,我希望能够获取资源图像的路径并使用 matplotlib 绘制它,例如

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from PyQt5 import QMysteryClass

qimg = QMysteryClass(":/myresource.png")
img = mpimg.imread( qimg.absolutePath() )
fig, ax = plt.subplots()
ax.imshow( img )
plt.show()

有谁知道 PyQt 资源系统是否支持这种使用方式,还是我只需要以其他方式管理我的资源?

【问题讨论】:

    标签: python matplotlib pyqt5


    【解决方案1】:

    您应该阅读this doc 关于 Qt 资源系统的信息。基本上,您构建一个 .qrc XML 文件并使用 pyrcc5 可执行文件将其转换为您可以导入的 python 模块。

    一旦你有了你的 python 模块,你可以使用QFile(":/path/to/file") 来读取内容,或者直接使用QImage,因为你想处理图像。此外,请注意您的文件在内存中,因此您无法在具有路径的非 Qt 类中访问它们,这就是您需要从内存中读取数据的原因。将您的图像数据加载到缓冲区中并将其读入您的 matplotlib 类。

    来自matplotlib.image.imread 文档:

    fname 可以是字符串路径或 Python 文件类对象。如果 使用文件对象,必须以二进制模式打开。

    因此,您应该能够将数据包装在 BytesIO 对象中。

    【讨论】:

    • 具有讽刺意味的是,您链接到的示例描述了如何不使用使用 pyrcc 来包含资源。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2018-03-27
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多