Qt Pyside中的动态资源加载

Qt Pyside中的动态资源加载,qt,resources,pyside,Qt,Resources,Pyside,我正在使用PySide并尝试动态地重新构建UI的皮肤 这似乎适用于在样式表之间切换,但不适用于小部件本身上设置的值 我在CSS中使用相对路径,如下所示: background-image: url(:/icons/images/magnifier.png) 我可以使用从qrc文件编译的py文件应用这些CSS样式,如下所示: execfile(pyResourceFilePath, globals()) with open(cssFilePath, 'r') as f: css = f.

我正在使用PySide并尝试动态地重新构建UI的皮肤

这似乎适用于在样式表之间切换,但不适用于小部件本身上设置的值

我在CSS中使用相对路径,如下所示:

background-image: url(:/icons/images/magnifier.png)
我可以使用从qrc文件编译的py文件应用这些CSS样式,如下所示:

execfile(pyResourceFilePath, globals())
with open(cssFilePath, 'r') as f:
    css = f.read()
topWidget.setStyleSheet(css)
…这有点笨拙,但很有效

但是,如果我在创建小部件时尝试使用这些相对路径:

icon = QtGui.QIcon()
icon.addPixmap(
    QtGui.QPixmap(":/icons/images/arrow-expand.gif"), 
    QtGui.QIcon.Normal, 
    QtGui.QIcon.Off
)
execfile(pyResourceFilePath, globals())
图像不会出现

在上面使用绝对路径可以显示图像,因此小部件如何理解在何处查找资源似乎是一个问题

我尝试过摆弄QtCore.QResource.registerResourcepyResourceFilePath,但也没有成功

有什么想法吗

编辑: 经过一番交谈之后,很明显,pixmaps中的资源需要某种更新,我想这就是CSS在应用时所做的


更新具有相同路径但位于新资源下的任何现有pixmaps的有效方法是什么?

为什么要在模块上使用execfile,而不仅仅是导入它?当然,在引用资源路径之前需要导入模块?我想我可以进行动态导入,但我的想法是,我只想按需导入资源-如果我有多个可用的样式/资源包,我只想引入用户请求或切换到的样式/资源包。在您的示例代码中,您尝试在加载资源之前引用资源路径。你为什么认为这会起作用?只是为了抢占一个可能的答案:如果你的真实代码做了不同的事情,也许你应该考虑张贴一个。这是正确的;在加载资源之前,我正在设置资源的相对路径。我希望这能起作用,因为它似乎可以与样式表一起工作——尽管我应该努力编码样式,而不是在导入资源之前动态加载它,以验证这一点。支撑样式表的技术内置了对动态更新的支持。但是,假设所有Qt类都存在这样的支持是错误的。如果从资源创建pixmaps,然后更改资源,则必须自己更新pixmaps。它不会自动发生。