程序中未显示图像,使用PySide和QtDesigner
我正在做一个Python项目,使用PySide作为我的图形界面语言。大约一周前我问过同样的问题,但得到的答案没有解决我的问题。
所以我重新提问,并提供了更多关于我项目的细节。
我之前的问题在这里:从.qrc文件编译的.py文件(使用pyside-rcc)无法工作
我使用pyside-uic从.ui文件生成.py文件,并使用pyside-rcc从.qrc文件生成.py文件。
这是我的文件路径和.qrc文件的内容
*CLoginWidget.py是通过pyside-uic生成的,CLoginWidgetRes_rc.py是通过pyside-rcc生成的
下面是我使用这些资源的示例代码
self.enterButton.setStyleSheet("QPushButton {\n"
" image: url(:/button/res/login_enter_button.gif);\n"
"border-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" image: url(:/button/res/login_entered_button.gif);\n"
"}")
问题是我的程序中没有显示图片。
有没有人知道发生了什么,以及如何解决这个问题?
谢谢大家的回答;)
1 个回答
2
你提到的问题主要出在样式表的语法上。关于 image
的 QSS 属性参考 里说:
这个属性只适用于子控件 - 我们不支持其他元素使用这个属性。
所以它显然不适用于 QPushButton
,因为这个按钮没有子控件。也许你想用的是 border-image
或者 background-image
呢?
如果我按照我之前的 回答 中提到的方法设置资源模块,这些属性对我来说是完全正常的。
下面是我测试过的样式表:
self.button.setStyleSheet("""
QPushButton {
background-image: url(:/button/res/image.gif);
}
""")
编辑:
下面是一个简单的示例,展示了如何在 pyside 中正确使用资源。你只需要确保有一个名为 res/login_enter_button.gif
的图片文件,然后把下面的示例文件保存在包含 res
目录的文件夹里。然后你可以这样做:
pyside-uic -o example_ui.py example.ui
pyside-rcc -o example_rc.py example.qrc
一切都会按预期工作。
example.qrc:
<RCC>
<qresource prefix="button">
<file>res/login_enter_button.gif</file>
</qresource>
</RCC>
example.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Window</class>
<widget class="QWidget" name="Window">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>171</width>
<height>61</height>
</rect>
</property>
<property name="windowTitle">
<string>Hello World</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="button">
<property name="text">
<string>Test</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="example.qrc"/>
</resources>
<connections/>
</ui>
example.py
from PySide import QtGui
from example_ui import Ui_Window
class Window(QtGui.QWidget, Ui_Window):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
self.button.setStyleSheet("""
QPushButton {
background-image: url(:/button/res/login_enter_button.gif);
}
""")
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())