如何在Qt Stylesheet 中设置相对路径?
How to set relative path in Qt Stylesheet?
我正在尝试使用样式表将图片添加到 PyQt5 中的按钮。如果我使用图片的绝对路径,它工作正常,但我需要使用相对路径。我已经尝试过 pythonic 方式(注释掉的部分),但它不起作用可能是因为反斜杠。我知道 Qt 资源,但我不知道如何使用它们。 link
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 Resource System。 .qrc 的优点是它们允许应用程序不依赖于本地文件,因为资源被转换为 python 代码。
对于这种情况,可以使用以下 .qrc:
resource.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
然后你需要将文件导入到脚本中:
main.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
我正在尝试使用样式表将图片添加到 PyQt5 中的按钮。如果我使用图片的绝对路径,它工作正常,但我需要使用相对路径。我已经尝试过 pythonic 方式(注释掉的部分),但它不起作用可能是因为反斜杠。我知道 Qt 资源,但我不知道如何使用它们。 link
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 Resource System。 .qrc 的优点是它们允许应用程序不依赖于本地文件,因为资源被转换为 python 代码。
对于这种情况,可以使用以下 .qrc:
resource.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
然后你需要将文件导入到脚本中:
main.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