python - 如何在 Qt 样式表中设置相对路径?
问题描述
我正在尝试使用样式表将图片添加到 PyQt5 中的按钮。如果我使用图片的绝对路径,它工作正常,但我需要使用相对路径。我已经尝试过pythonic方式(注释掉的部分),但它可能因为反斜杠而无法正常工作。我知道 Qt 资源,但我不明白如何使用它们。关联
import os, sys
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
#scriptDir = os.path.dirname(os.path.realpath(__file__))
#pngloc = (scriptDir + os.path.sep + 'resources' + os.path.sep + 'min.png')
button1 = QPushButton("", self)
button1.setStyleSheet('QPushButton {'
'background-image: url(e:/new/resources/min.png);'
'}')
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
解决方案
如果您想使用相对路径,那么一个不错的选择是使用创建虚拟路径的Qt 资源系统。.qrc 的优点是它们允许应用程序不依赖本地文件,因为资源被转换为 python 代码。
对于这种情况,可以使用以下 .qrc:
资源.qrc
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>resources/min.png</file>
</qresource>
</RCC>
因此,您需要使用 pyrcc5 将 .qrc 转换为 .py:
pyrcc5 resource.qrc -o resource_rc.py
或者
python -m PyQt5.pyrcc_main resource.qrc -o resource_rc.py
然后你需要将文件导入到脚本中:
主文件
import os, sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
import resource_rc
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
button1 = QPushButton(self)
button1.setStyleSheet(
"""QPushButton {
background-image: url(:/resources/min.png);
}"""
)
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
├── main.py
├── resource.qrc
├── resource_rc.py
└── resources
└── min.png
推荐阅读
- r - 计算每次就诊时在数据中遇到状况的人数
- node.js - Mongoose TypeError:x 不是构造函数
- java - 在 Guice 中延迟对象注入?
- python - 如何使用 peewee orm 从架构内的特定表创建模型?(FastAPI 项目)
- ruby-on-rails - Docker rails 应用程序不会与 postgresql 数据库对话
- mips - 无法理解 lbu 指令
- spring - 休眠:findById 与 getbyId
- javascript - 在cropperjs中使用具有非本地url的图像
- c++ - 编写一个接受字符串并返回回文数和最长回文数的 C++ 程序
- python - 提取 HTML 元素时在 CSV 中添加新行