为啥我执行 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 "SCAN" 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 "Run" 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 代码时没有显示图标和图像?的主要内容,如果未能解决你的问题,请参考以下文章
Python3 + Pillow + QT5:当我调整包含图像的标签大小时崩溃