使用PySide和QtDesigner在程序中不显示图像

时间:2014-03-26 17:19:26

标签: python user-interface pyside qt-designer

我正在研究我的Python项目并使用PySide作为我的GUI语言。大约一周前我问了同样的问题,但答案无法解决我的问题。 所以,我问了新问题并提供了有关我项目的更多细节。

我之前的问题是:A .py file which compiled from .qrc file( using pyside-rcc ) does not work

我使用pyside-uic从.ui文件生成.py文件,并使用pyside-rcc从.qrc文件生成.py文件。

这是我的文件路径和.qrc文件

enter image description here

* CLoginWidget.py由pyside-uic生成,CLoginWidgetRes_rc.py由pyside-rcc生成

enter image description here

这是我使用这些资源的示例代码

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 个答案:

答案 0 :(得分:2)

您的示例中的实际问题似乎与stylesheet-syntax有关。 image的{​​{3}}表示:

  

此属性仅适用于子控件 - 我们不支持其他   元件。

因此它显然无法与QPushButton一起使用,因为它没有任何子控件。也许您打算使用border-imagebackground-image

如果我使用QSS properties reference中列出的关于此主题的方法设置资源模块,这些属性与我的预期完全一致。

以下是我测试过的实际样式表:

    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_())