程序中未显示图像,使用PySide和QtDesigner

1 投票
1 回答
3267 浏览
提问于 2025-04-18 00:01

我正在做一个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

你提到的问题主要出在样式表的语法上。关于 imageQSS 属性参考 里说:

这个属性只适用于子控件 - 我们不支持其他元素使用这个属性。

所以它显然不适用于 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_())

撰写回答