【问题标题】:An images does not show in the program, using PySide and QtDesigner使用 PySide 和 QtDesigner 在程序中不显示图像
【发布时间】:2014-05-05 07:06:19
【问题描述】:

我正在开发我的 Python 项目并使用 PySide 作为我的 GUI 语言。大约 1 周前我问过同样的问题,但答案无法解决我的问题。 因此,我提出了新问题并提供了有关我的项目的更多详细信息。

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

我使用 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"
"}")

问题是图像没有显示在我的程序中。 有谁知道会发生什么以及如何解决这个问题。

谢谢大家的回答;)

【问题讨论】:

    标签: python user-interface pyside qt-designer


    【解决方案1】:

    您示例中的实际问题似乎与样式表语法有关。 QSS properties reference for image 声明:

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

    所以它显然不适用于QPushButton,因为它没有任何子控件。也许您打算使用border-imagebackground-image

    如果我使用我的previous answer 中概述的方法设置资源模块,这些属性对我来说完全符合我的预期。

    这是我测试的实际样式表:

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

    【讨论】:

    • 感谢您的回答,但它不起作用。在 QtDesigner 中,我使用“图像”而不是“背景图像”,它可以工作。但是当我在代码中使用“图像”时,它不起作用(也是“背景图像”)。
    • @PandarianLd。我已经更新了我的答案以包含一个 known working 示例。如果你做事正确,你应该很容易测试它并确认它也适合你。然后,您可以与您的实际应用程序进行比较,看看哪里出了问题。
    • 您的解决方案有效!!我试图理解定义图像路径的方式。现在,我必须查看并检查我的代码有什么问题。非常感谢@ekhumoro。我非常感谢您提出的所有建议并跟进我的问题。我希望我的项目很快就会好起来,我会在它工作的时候通知你。再次感谢您;)
    • 会不会是不同的电脑会给出不同的结果?我正在和我的伙伴一起工作。我们俩都使用东芝笔记本(不同型号)和 Python 3.3.2 32 位。在我的笔记本中运行项目时,它可以工作。另一方面,在我的合作伙伴笔记本中运行,它不起作用。我不知道这里会发生什么。
    • @PandarianLd。很高兴看到你取得了一些进展。我能想到为什么我的示例在另一台机器上不起作用的唯一原因是 qt 库是在没有 gif 支持的情况下编译的。尝试使用其他一些图像格式(jpg、png),看看是否有什么不同。两台机器是否运行相同的操作系统?
    猜你喜欢
    • 2012-08-15
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多