为啥我执行 Python QT5 代码时没有显示图标和图像?

Posted

技术标签:

【中文标题】为啥我执行 Python QT5 代码时没有显示图标和图像?【英文标题】:Why Icon and images are not shown when I execute Python QT5 code?为什么我执行 Python QT5 代码时没有显示图标和图像? 【发布时间】:2020-08-10 08:49:11 【问题描述】:

环境:

Python 3.7.7

Qt5

Qt 设计器 5.11

问题:

我用 Qt Designer 设计了一个 GUI,并在按钮的标签和图标的背景中添加了一些图像。 我可以从软件 Qt 设计器中正确查看图像和图标。但是当我执行我的 python 脚本来加载我的 UI 时,我再也看不到图像了。

代码:

我在根文件夹中有我的主要 python 脚本,在“ui”文件夹中有 ui、qrc 和图像文件:

main.py
ui/config.qrc
ui/doc.qrc
ui/document.png
ui/gear.png
ui/logo.qrc
ui/logo_MyUI_300.jpg
ui/MyUI.ui
ui/play-button.png
ui/play.png
ui/question.png
ui/quit.png
ui/quit.qrc
ui/report.qrc
ui/run.qrc
ui/save.png
ui/save.qrc
ui/scan.qrc
ui/search.png
ui/seo-report.png
ui/support.qrc
ui/telegram.png
ui/telegram.qrc
ui/watch_videos.qrc

main.py:

from PyQt5 import QtWidgets, uic

gui = QtWidgets.QApplication([])
ui=uic.loadUi('ui/MyUI.ui')

ui.show()
gui.exec()

MyUI.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <author>MyUI.co</author>
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>580</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MyUI.co</string>
  </property>
  <property name="windowIcon">
   <iconset>
    <normalon>:/logo/logo_MyUI_300.jpg</normalon>
   </iconset>
  </property>
  <property name="styleSheet">
   <string notr="true">background-color: rgb(255, 255, 255);</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLineEdit" name="lineEdit_Email">
    <property name="geometry">
     <rect>
      <x>126</x>
      <y>190</y>
      <width>221</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="placeholderText">
     <string>i.e: johndoe@gmail.com</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_License">
    <property name="geometry">
     <rect>
      <x>126</x>
      <y>220</y>
      <width>221</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="placeholderText">
     <string>i.e: gold89DE-B4JI-HQ3E-D8UT</string>
    </property>
   </widget>
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>76</x>
      <y>190</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Email</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>10</y>
      <width>75</width>
      <height>75</height>
     </rect>
    </property>
    <property name="autoFillBackground">
     <bool>true</bool>
    </property>
    <property name="styleSheet">
     <string notr="true">background-image: url(:/logo/logo_MyUI_300.jpg);</string>
    </property>
    <property name="text">
     <string/>
    </property>
    <property name="textFormat">
     <enum>Qt::RichText</enum>
    </property>
    <property name="pixmap">
     <pixmap resource="logo.qrc">:/logo/logo_MyUI_300.jpg</pixmap>
    </property>
    <property name="openExternalLinks">
     <bool>false</bool>
    </property>
   </widget>
   <widget class="QLabel" name="label_3">
    <property name="geometry">
     <rect>
      <x>36</x>
      <y>220</y>
      <width>81</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>License Key</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_1">
    <property name="geometry">
     <rect>
      <x>36</x>
      <y>140</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>20</pointsize>
     </font>
    </property>
    <property name="text">
     <string>1.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_1_Title">
    <property name="geometry">
     <rect>
      <x>66</x>
      <y>146</y>
      <width>231</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Activate your MyUI</string>
    </property>
   </widget>
   <widget class="QPushButton" name="button_SaveLicense">
    <property name="geometry">
     <rect>
      <x>256</x>
      <y>260</y>
      <width>91</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199 199);</string>
    </property>
    <property name="text">
     <string>Save</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/save/save.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QLabel" name="label_5">
    <property name="geometry">
     <rect>
      <x>36</x>
      <y>304</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>20</pointsize>
     </font>
    </property>
    <property name="text">
     <string>2.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2_Title">
    <property name="geometry">
     <rect>
      <x>66</x>
      <y>310</y>
      <width>331</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Required Softwares are Installed?</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_8">
    <property name="geometry">
     <rect>
      <x>86</x>
      <y>350</y>
      <width>101</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Java Runtime:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_9">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>350</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_10">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>370</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_11">
    <property name="geometry">
     <rect>
      <x>126</x>
      <y>370</y>
      <width>61</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>NodeJS:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_12">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>390</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_13">
    <property name="geometry">
     <rect>
      <x>90</x>
      <y>390</y>
      <width>91</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>SDKManager:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_14">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>410</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_15">
    <property name="geometry">
     <rect>
      <x>106</x>
      <y>410</y>
      <width>81</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Build-Tools:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_16">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>430</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_17">
    <property name="geometry">
     <rect>
      <x>126</x>
      <y>430</y>
      <width>61</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Appium:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_18">
    <property name="geometry">
     <rect>
      <x>186</x>
      <y>450</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>No</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_19">
    <property name="geometry">
     <rect>
      <x>110</x>
      <y>450</y>
      <width>71</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Tesseract:</string>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Run">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>20</y>
      <width>71</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(85, 255, 127);</string>
    </property>
    <property name="text">
     <string>Run</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/run/play-button.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Quit">
    <property name="geometry">
     <rect>
      <x>180</x>
      <y>20</y>
      <width>71</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(255, 112, 93);</string>
    </property>
    <property name="text">
     <string>Quit</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/quit/quit.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Report">
    <property name="geometry">
     <rect>
      <x>280</x>
      <y>20</y>
      <width>101</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199, 199);</string>
    </property>
    <property name="text">
     <string>See Report</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/report/seo-report.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Doc">
    <property name="geometry">
     <rect>
      <x>390</x>
      <y>20</y>
      <width>121</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199, 199);</string>
    </property>
    <property name="text">
     <string>Read the Doc</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/doc/document.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Support">
    <property name="geometry">
     <rect>
      <x>650</x>
      <y>20</y>
      <width>131</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199, 199);</string>
    </property>
    <property name="text">
     <string>Contact Support</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/support/question.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QLabel" name="label_4">
    <property name="geometry">
     <rect>
      <x>430</x>
      <y>140</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>20</pointsize>
     </font>
    </property>
    <property name="text">
     <string>3.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_3_Title">
    <property name="geometry">
     <rect>
      <x>460</x>
      <y>146</y>
      <width>331</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Connect your Smartphone(s)</string>
    </property>
   </widget>
   <widget class="QPlainTextEdit" name="plainTextEdit_Smartphones">
    <property name="geometry">
     <rect>
      <x>440</x>
      <y>175</y>
      <width>311</width>
      <height>171</height>
     </rect>
    </property>
    <property name="plainText">
     <string>No smartphones were detected... Please verify you enable USB debug mode and you plug correctly your smartphone(s) to your computer through USB, and press the &quot;SCAN&quot; button.</string>
    </property>
   </widget>
   <widget class="QPushButton" name="button_ScanSmartphones">
    <property name="geometry">
     <rect>
      <x>660</x>
      <y>355</y>
      <width>91</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199 199);</string>
    </property>
    <property name="text">
     <string>Scan</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/scan/search.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Videos">
    <property name="geometry">
     <rect>
      <x>520</x>
      <y>20</y>
      <width>121</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199, 199);</string>
    </property>
    <property name="text">
     <string>Watch videos</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/whatch_videos/play.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QLabel" name="label_6">
    <property name="geometry">
     <rect>
      <x>430</x>
      <y>390</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>20</pointsize>
     </font>
    </property>
    <property name="text">
     <string>4.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_4_Title">
    <property name="geometry">
     <rect>
      <x>460</x>
      <y>396</y>
      <width>331</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Configure the tasks</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_info1">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>265</y>
      <width>201</width>
      <height>20</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Your MyUI is activated.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_info2">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>480</y>
      <width>281</width>
      <height>20</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="text">
     <string>The softwares are correctly installed.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_info3">
    <property name="geometry">
     <rect>
      <x>440</x>
      <y>360</y>
      <width>201</width>
      <height>20</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="text">
     <string>MyUI detected smartphones.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_info4">
    <property name="geometry">
     <rect>
      <x>440</x>
      <y>470</y>
      <width>201</width>
      <height>20</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>10</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Some tasks were configured.</string>
    </property>
   </widget>
   <widget class="QPushButton" name="button_Config">
    <property name="geometry">
     <rect>
      <x>440</x>
      <y>430</y>
      <width>311</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>16</pointsize>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(199, 199 199);</string>
    </property>
    <property name="text">
     <string>Open configuration page</string>
    </property>
    <property name="icon">
     <iconset>
      <normalon>:/config/gear.png</normalon>
     </iconset>
    </property>
   </widget>
   <widget class="QLabel" name="label_HeaderMsg">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>90</y>
      <width>671</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Everything is correct. Start your MyUI by pressing the button &quot;Run&quot; in top left corner.</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_HeaderMsg_2">
    <property name="geometry">
     <rect>
      <x>220</x>
      <y>530</y>
      <width>421</width>
      <height>21</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Join our community on Telegram: myurl</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_7">
    <property name="geometry">
     <rect>
      <x>180</x>
      <y>525</y>
      <width>32</width>
      <height>32</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-image: url(:/telegram/telegram.png);</string>
    </property>
    <property name="text">
     <string/>
    </property>
   </widget>
   <widget class="Line" name="line">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>120</y>
      <width>781</width>
      <height>20</height>
     </rect>
    </property>
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
   </widget>
   <widget class="Line" name="line_2">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>500</y>
      <width>781</width>
      <height>20</height>
     </rect>
    </property>
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources>
  <include location="logo.qrc"/>
  <include location="telegram.qrc"/>
  <include location="config.qrc"/>
  <include location="scan.qrc"/>
  <include location="save.qrc"/>
  <include location="watch_videos.qrc"/>
  <include location="support.qrc"/>
  <include location="doc.qrc"/>
  <include location="report.qrc"/>
  <include location="quit.qrc"/>
  <include location="run.qrc"/>
 </resources>
 <connections/>
</ui>

这是一个qrc文件(所有qrc文件的源代码都是一样的,只是图片文件名和前缀都变了)。

logo.qrc:

<RCC>
  <qresource prefix="logo">
    <file>logo_MyUI_300.jpg</file>
  </qresource>
</RCC>

我尝试了什么:

我编辑了 MyUI.ui 文件中的图像路径以添加“/ui/”文件夹路径,但它没有改变任何东西。 我在 qrc 文件中做了同样的事情,没有任何变化。

您知道是什么阻碍了图像的显示吗?

【问题讨论】:

【参考方案1】:

uic.loadUi函数不是Qt Designate用来显示预览的方法,uic.loadUi是动态生成python允许的类和属性,所以需要你用pyrcc5编译rc并导入到你的脚本,例如:

pyrcc5 ui/logo.qrc -o logo_rc.py
from PyQt5 import QtWidgets, uic

import logo_rc

gui = QtWidgets.QApplication([])
ui=uic.loadUi('ui/MyUI.ui')

ui.show()
gui.exec()

【讨论】:

以上是关于为啥我执行 Python QT5 代码时没有显示图标和图像?的主要内容,如果未能解决你的问题,请参考以下文章

Qt5.5 为啥不显示错误信息?

为啥没有显示绝对定位的小部件?

qt5有没有窗体显示前事件

Python3 + Pillow + QT5:当我调整包含图像的标签大小时崩溃

为啥我的 python 脚本没有显示为进程,即使它正在运行?

为啥我的qt5.4编译以后就没反应了,也不出现控制台程序,也没有生成.exe文件