tinker调用pyqt5设计UI的方法解决图片,音频等资源打包成exe问题(在窗口内部显示图片,调用音频等,win7 64位可能不适用)

涉及内容比较复杂,我也是初学
首先需要安装PyQt5及designer.exe并汉化,参考

https://blog.csdn.net/qq_36374896/article/details/83513828

百度云汉化包

https://pan.baidu.com/s/1_zEc2CQHizcAJYMM0nM38Q

这里汉化包下载较慢,急速下载方法

https://pan.baiduwp.com/

注意:
designer.exe是在pip的时候就自动装好的
不用搜做designer.exe如何安装之类的
但designer.exe藏的比较隐蔽
安装后如果找不到designer.exe
直接在我的电脑里搜索designer.exe即可

之前看过

https://blog.csdn.net/monster_li57/article/details/80601050

开始以为是方法的问题,后来才觉得应该是我的电脑不行,参

https://www.cnblogs.com/sitongyan/p/10613672.html

我想到了另一种方法,但结果因为电脑原因还是不能打包成exe
不过这个方法可以解决的问题不限于图片,其他如声音应该都能解决
显示方法:
想要显示图片c.png
新建文本文档写入:

<RCC>
    <qresource prefix="/">
        <file>c.png</file>
    </qresource>
</RCC>

保存为所有类型
后缀改为qrc
(假设是c.qrc)
与c.png放在同一目录下不要动
打开designer.exe
文件-新建-Widget-创建
这时会在中间出现一个窗口
但现在里面是空的
看左边的Widget Box往下拉
找到Display Widgets
按住里面的Label控件
托拽到中间的空窗口里
在窗口里的控件所在位置处右键
选择:改变多信息文本
出来的新窗口中选择:编辑图像
左上角有一枝笔,点一下
出来的窗口左下角,选第二个方块:导入资源文件
找到你的资源文件c.qrc
注意不要动图像文件
如果你在右边的框中能够看到你的资源文件(如图)

就说明你的qrc没问题
否则请检查qrc文件内容
(找到qrc文件,右键以记事本打开,并与上面代码,你的资源名字,后缀核对)
点击确定,最后到这个界面(由于我只需要显示图片资源)

点击文件-另存为-类型选设计师ui文件,名字最好纯英文
找到你的ui文件
空白处按住Shift同时右键,打开命令行
输入pyuic5 -o a.py a.ui
会把ui文件转换为py文件,这样就可以使用里面的资源了
具体使用方法(直接贴代码更直观)
下面是我的ui转换为py的文件代码(ui里只加了一张支付宝收钱码)

# -*- coding: utf-8 -*-

# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.13.0)
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore

qt_resource_data = b"\
\x00\x00\x07\x3e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\xca\x00\x00\x00\xca\x08\x06\x00\x00\x00\xe4\x65\xdf\xa8\
\x00\x00\x07\x05\x49\x44\x41\x54\x78\x9c\xed\xdd\xdb\x72\x22\x39\
\x10\x05\x40\xd8\xf0\xff\xff\x32\xfb\x8e\x35\xc1\xd9\x9a\x2a\x49\
\x6c\x64\x3e\xce\x18\x35\x06\x9f\x50\xab\x75\xa9\xe7\xe3\xf1\x78\
\x3d\x0e\x7a\xbd\x66\x2e\xff\x7c\x3e\x47\xae\xf3\xde\x6e\x67\xdb\
\x1d\xd7\xee\x7a\x7f\xab\x76\x3a\xda\x4d\xae\xb5\x6a\x37\x79\x3f\
\x53\x5e\xaf\xd7\xe3\x9f\x63\x57\x87\x2f\x22\x28\x10\x10\x14\x08\
\x08\x0a\x04\x7e\x56\xff\xb8\x6b\x80\x7d\x9b\xea\x40\x78\x6a\xe0\
\xdb\xf5\x79\x55\x1e\x6c\xec\xfc\x1b\xa8\x5c\x6b\xf2\x01\xca\xea\
\x3d\xea\x51\x20\x20\x28\x10\x10\x14\x08\x2c\xc7\x28\xef\xaa\xf7\
\xca\x27\xef\xcb\x2b\xed\x76\xdd\xf7\x9e\x6c\x67\xe7\xbd\x7b\x32\
\x31\xb8\x6b\x32\x76\x75\xed\x44\xfa\xfe\xf4\x28\x10\x10\x14\x08\
\x08\x0a\x04\x04\x05\x02\xd1\x60\xfe\x36\x93\x2b\x81\x2b\x3f\x53\
\x79\x4d\xd7\x40\xb8\x6b\x00\xdb\x35\x08\xef\x78\x80\xb3\xf3\x01\
\x40\x4a\x8f\x02\x01\x41\x81\x80\xa0\x40\xe0\xba\x31\x4a\x75\x77\
\x5b\xc7\xbd\x7a\x75\x07\x61\xc5\xae\xdf\x29\x6d\xf7\xe4\x4e\xc9\
\x6f\xa0\x47\x81\x80\xa0\x40\x40\x50\x20\x20\x28\x10\x88\x06\xf3\
\xa7\x27\x80\x3a\x76\xe4\xad\x06\x95\x53\xab\x61\x77\xee\x78\x3c\
\x39\x29\x59\x6d\x67\xca\xe4\xb5\xf4\x28\x10\x10\x14\x08\x08\x0a\
\x04\x96\x63\x94\x93\x93\x44\x5d\x93\x61\x3b\x8f\xe9\xec\xba\x56\
\xc7\xe2\xc0\xae\x49\xd3\x93\xdf\xc3\xd4\xb8\xeb\x6f\xe8\x51\x20\
\x20\x28\x10\x10\x14\x08\x08\x0a\x04\x7e\x4e\x4f\x26\xbe\xeb\x3a\
\xee\x73\xe7\x4a\xd7\xae\x15\xc6\xbb\xbe\x8b\xc9\xe3\x94\xa6\x06\
\xd9\xa7\xff\x4e\xf5\x28\x10\x10\x14\x08\x08\x0a\x04\xca\x3b\x1c\
\x2b\x0b\xff\xba\x16\x0b\xee\xbc\x0f\x3e\x79\x52\x4b\x97\xae\x49\
\xbf\xe4\x67\x2a\x8b\x53\x4f\x96\x19\x71\xa4\x2a\x34\x12\x14\x08\
\x08\x0a\x04\x04\x05\x02\xd1\xea\xe1\x93\x93\x80\x55\xb7\xd5\x20\
\xdc\xb5\x8a\xb6\xeb\x61\xc8\xd4\x0a\xe3\xae\x07\x09\x89\xce\xbf\
\x01\x3d\x0a\x04\x04\x05\x02\x82\x02\x81\xe7\xe3\xf1\xf8\x75\x23\
\xd7\x75\xbc\x66\xd7\xa4\xda\xc9\xe3\x3e\x4f\x2e\xc6\xeb\xba\x77\
\xbf\xfd\xb8\xd4\x6f\x78\x7f\x7a\x14\x08\x08\x0a\x04\x04\x05\x02\
\x82\x02\x81\xe7\x2b\x18\x25\xed\x1c\xf4\x4e\xad\x2e\x9d\x3a\x7e\
\x67\xf5\x33\xc9\xf5\x77\x1e\xa9\x5a\xb1\x73\xa0\xfe\xe9\x35\x55\
\x9d\xb5\x34\xf5\x28\x10\x10\x14\x08\x08\x0a\x04\x7e\xaa\xf7\xbd\
\xdf\x58\x03\xbd\xe3\xda\x89\xae\x05\x85\xc9\xff\x4f\x4d\x4a\x26\
\x3f\xd3\x35\x66\xea\x1a\xc7\x4c\xfe\x9d\xe8\x51\x20\x20\x28\x10\
\x10\x14\x08\x2c\x4f\x8a\xdc\x75\x22\xc7\xaa\x9d\xaa\x4f\xef\xa7\
\xeb\x9e\xb6\x7a\xdf\xdb\x31\xd7\x32\x39\x9e\xac\xd8\xb9\xf9\x6c\
\xe7\xa9\x35\xab\xeb\xeb\x51\x20\x20\x28\x10\x10\x14\x08\x08\x0a\
\x04\x96\x13\x8e\xef\x76\xd6\xfc\xab\xaa\x9c\xfe\x51\x69\xb7\x6a\
\x57\xed\xf9\xc9\x87\x33\x1d\x03\xea\xd3\xe5\x1b\xaa\xdf\x83\x1e\
\x05\x02\x82\x02\x01\x41\x81\x40\x79\xe3\xd6\x4d\xa7\x93\x54\xed\
\x5c\x8c\xd7\x71\x5a\x4a\x75\x02\x77\xe7\x26\xb1\x5d\xe3\x98\xea\
\x98\x38\xb9\x96\x8d\x5b\x50\x24\x28\x10\x10\x14\x08\x08\x0a\x04\
\xda\xca\x3e\x24\xed\x24\xba\x26\x06\xbb\x26\x52\x4f\x1e\xe5\x99\
\xb4\xbb\xf3\xa1\xca\xae\xba\x9d\x53\x0f\x6b\xfe\x86\x1e\x05\x02\
\x82\x02\x01\x41\x81\x40\x54\xf6\x61\xf9\xc2\xa1\x52\x6b\x3b\x4d\
\xbd\xbf\xae\xc9\xb0\x4f\x6d\xac\xda\x99\x9c\x14\xbc\xe9\x77\x58\
\xe9\x1a\x73\x9a\x70\x84\x22\x41\x81\x80\xa0\x40\x40\x50\x20\x30\
\x3a\xe1\xf8\xa9\xdd\xaa\xa9\xa3\x87\xa6\x06\xe1\xc9\xb5\x3b\xdb\
\xae\x5c\xfb\xdd\xce\x49\xbf\xa9\xef\xa1\xf3\xc1\x81\x1e\x05\x02\
\x82\x02\x01\x41\x81\x40\xdb\x0e\xc7\xd3\xb5\xdf\x6f\xda\x59\x37\
\xe5\xb6\xcf\xb8\xf2\x3d\x9c\x3c\x01\xa6\xca\x84\x23\x84\x04\x05\
\x02\x82\x02\x01\x41\x81\xc0\x72\xc2\xf1\xdd\xce\x1d\x8e\x5d\xd7\
\xdf\x39\x99\x78\xd3\x60\x74\x67\x1d\xf7\xa9\xb6\x27\x3f\xab\xea\
\x03\x1b\x3d\x0a\x04\x04\x05\x02\x82\x02\x81\x68\x8c\x52\x35\x35\
\x19\x56\x19\x6f\xec\xdc\x59\xf7\x6d\xa7\xbb\xac\xda\x3e\x59\x93\
\x73\x72\x4c\x5c\xfd\x3d\xf5\x28\x10\x10\x14\x08\x08\x0a\x04\x04\
\x05\x02\x51\x0d\xc7\x2e\x5d\xab\x5f\x6f\xaf\xf7\x51\x9d\x70\xec\
\x78\xb8\xd0\x35\xd9\xd9\xb5\x62\xbc\xeb\xef\xeb\xe4\xae\x5b\xab\
\x87\x21\x24\x28\x10\x10\x14\x08\x94\x8f\x54\xfd\xd5\xd0\xe1\xda\
\x81\x15\x53\x35\x12\x4f\x4e\x38\xee\x3c\x16\xb6\xab\xdd\xae\xeb\
\x4c\x2e\xc2\xd5\xa3\x40\x40\x50\x20\x20\x28\x10\x68\x2b\xfb\xb0\
\xd3\xae\x31\x4b\xe7\xb5\x6e\xff\xbc\xa6\xee\xef\x6f\xff\xbd\x53\
\x7a\x14\x08\x08\x0a\x04\x04\x05\x02\x82\x02\x81\x68\x87\xe3\x37\
\x4c\x12\x75\x1c\xe5\x99\xb4\x7b\x5b\x8d\xc4\x9d\x83\xe7\x93\xef\
\x6f\xea\x08\xdf\x94\x1e\x05\x02\x82\x02\x01\x41\x81\xc0\xb2\xec\
\xc3\x54\xbd\xee\xdb\x9c\x2e\x77\xf6\xc9\xce\xfa\xeb\x15\xb7\x2d\
\x7a\x9d\x5a\xe4\xfa\x78\xe8\x51\x20\x22\x28\x10\x10\x14\x08\x08\
\x0a\x04\x96\x13\x8e\x95\x41\x50\xa5\x9e\x78\xda\xce\xd4\x31\x9d\
\x27\x4f\xf6\x48\xec\xaa\x0d\x99\x5e\xfb\xe4\x04\xed\xe9\x1d\xa1\
\x7a\x14\x08\x08\x0a\x04\x04\x05\x02\xcb\x31\x4a\xd7\x62\xb7\xca\
\x84\xde\xc9\xfb\xfb\xdb\x27\x48\x27\x75\x7d\x9f\x53\x0b\x27\xbb\
\xc6\xc4\x9f\xda\xfd\x53\x3b\x7a\x14\x08\x08\x0a\x04\x04\x05\x02\
\x82\x02\x81\xe5\x71\x45\xef\x4e\x4f\xd6\x4d\xed\x6e\xbb\xad\xd6\
\x62\xc7\x6e\xc0\x93\x47\x13\x75\xb5\x3d\xd5\xee\xaa\x6d\x83\x79\
\x68\x24\x28\x10\x10\x14\x08\x94\xc7\x28\xbf\x1a\x1a\x2c\x53\x36\
\x55\x6e\x60\xe7\x24\xdb\xd4\xf8\x63\x67\x3b\xbb\x16\x69\xee\x9c\
\xf8\x4d\xc7\xdf\x7a\x14\x08\x08\x0a\x04\x04\x05\x02\x82\x02\x81\
\xe3\x13\x8e\x53\x93\x6a\x1d\xd7\xe9\xd4\xb1\x6b\x74\xe7\xd1\xb6\
\xb7\xed\x46\x4d\xae\x33\xb9\x9b\x52\x8f\x02\x01\x41\x81\x80\xa0\
\x40\x20\xaa\xe1\x38\x39\x99\x98\xe8\xb8\xf7\x3c\x7d\xef\xfe\xe9\
\x35\xab\xd7\xdd\xbe\x68\xb3\x72\xad\x9d\x93\x9d\x9d\x0b\x6c\xf5\
\x28\x10\x10\x14\x08\x08\x0a\x04\x04\x05\x02\xcb\xfa\x28\xd1\x0b\
\x2f\x1b\x68\x7e\xba\x76\x57\xed\x93\x9d\xef\xe7\x53\x1b\xa9\xdb\
\x76\xa3\x56\x9c\xde\xb9\xa9\x47\x81\x80\xa0\x40\x40\x50\x20\x10\
\xd5\x99\x5f\x99\x3a\x2e\x75\x6a\x17\xdd\xe9\x49\xc0\xa9\x9a\xec\
\x3b\x17\xa7\xbe\xb7\x7d\x5b\x89\x8e\xc9\x9a\x9c\x7a\x14\x08\x08\
\x0a\x04\x04\x05\x02\xe5\xb2\x0f\x15\xc9\xfd\xe0\xc9\x93\x22\x77\
\x96\x82\xab\xdc\xdf\x9f\x5e\x78\xfa\xee\xff\x7a\x92\xa5\x79\x14\
\x28\x12\x14\x08\x08\x0a\x04\x04\x05\x02\xd1\x0e\xc7\xe5\x0b\x87\
\x26\xd0\x92\x76\x2a\xef\xe7\x1b\x26\x1c\x2b\x4e\xee\x34\xad\x3c\
\x54\x39\x7d\x5c\xea\x3b\x3b\x1c\xa1\x91\xa0\x40\x40\x50\x20\xf0\
\x53\x9d\x64\xab\xbc\x6e\xe7\x82\xbd\xae\x76\xa7\x4e\x47\xec\x7a\
\xbf\xdf\x76\x62\xe7\x64\xbb\x5d\x0b\x73\x57\xf4\x28\x10\x10\x14\
\x08\x08\x0a\x04\x04\x05\x02\x3f\xb7\x95\x43\xe8\x5a\x19\xbc\xf3\
\xda\x5d\x93\x7e\x95\x81\xf9\xce\xd2\x10\xef\x2a\x9f\x57\xf5\x61\
\xc8\xd4\x4a\xef\xb4\x1d\x3d\x0a\x04\x04\x05\x02\x82\x02\x81\xf2\
\xa2\xc8\xd2\xc5\x36\x96\x13\x9b\x2a\xb5\x76\xf2\xb4\xc6\xae\x45\
\xa5\x5d\xdf\x43\x65\xbc\x71\x5b\x99\xc3\x84\x53\x58\x20\x24\x28\
\x10\x10\x14\x08\x08\x0a\x04\xa2\x23\x55\x4f\xd6\xfc\x5b\xb5\x93\
\xac\xa2\xfd\xaf\xff\xff\x37\x2a\x6d\xdf\x54\x4e\xa2\xfa\xba\xdb\
\x4b\x7f\xac\x54\x1f\x1e\xe9\x51\x20\x20\x28\x10\x10\x14\x08\x94\
\xcb\x3e\x9c\x34\x55\xeb\xfd\xe4\x71\xae\x49\x3b\x95\xb1\xd9\xea\
\x67\x76\x4e\xbe\xde\x56\x43\xde\x0e\x47\x18\x24\x28\x10\x10\x14\
\x08\x08\x0a\x04\xae\x1b\xcc\xef\x3c\x8e\xb4\x72\xed\xc9\x9d\x75\
\xbb\x76\x38\x76\x7d\x9e\xc9\x80\xba\x6b\x55\xf2\xa7\xeb\xfc\xe9\
\xfd\x7c\x7a\x5d\xfa\x59\xe8\x51\x20\x20\x28\x10\x10\x14\x08\x44\
\x63\x94\x9d\xb5\x0d\x93\xeb\x4f\x96\x67\xa8\xe8\x9a\xac\xab\xec\
\xd2\xfc\xd4\x46\xd5\xe4\x2e\xc8\x4f\xed\x9e\x2c\x0f\xf2\x27\x7a\
\x14\x08\x08\x0a\x04\x04\x05\x02\x82\x02\x81\xe5\x71\x45\x3b\x4d\
\xed\x80\x3b\x79\xe4\x52\x57\x9d\xc7\xa9\xc1\x73\xb5\x9d\x93\xab\
\x87\xbb\xea\xd4\x54\x3f\x1f\x3d\x0a\x04\x04\x05\x02\x82\x02\x81\
\xe7\xeb\xf4\x6c\x22\x7c\x81\x7f\x01\x1b\xa4\x8c\xa9\xf8\x82\xa0\
\x7e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"

qt_resource_name = b"\
\x00\x05\
\x00\x66\x57\x47\
\x00\x63\
\x00\x2e\x00\x70\x00\x6e\x00\x67\
"

qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"

qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x6d\x52\xdd\x5f\xd0\
"

qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
    rcc_version = 1
    qt_resource_struct = qt_resource_struct_v1
else:
    rcc_version = 2
    qt_resource_struct = qt_resource_struct_v2

def qInitResources():
    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()

下面是我的主程序

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("支付宝")
        Form.resize(210, 210)
        self.hxx = QtWidgets.QGraphicsView(Form)
        self.hxx.setGeometry(QtCore.QRect(-5, 1, 210, 210))
        self.hxx.setObjectName("hxx")                               #以上代码是eirc6编译窗口后自动生成的
        self.hxx.scene = QtWidgets.QGraphicsScene()      #创建一个图片元素的对象
        item=QtWidgets.QGraphicsPixmapItem(p)           #创建一个变量用于承载加载后的图片
        self.hxx.scene.addItem(item)                                  #将加载后的图片传递给scene对象
        self.hxx.setScene(self.hxx.scene)                             #这个我也不知道是做了个啥
        
        self.retranslateUi(Form)                                           #eirc6编译窗口后自动生成
        QtCore.QMetaObject.connectSlotsByName(Form)#eirc6编译窗口后自动生成


    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))


if __name__ == "__main__":
    import sys
    import c_rc
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()                    #以上代码是eirc6编译窗口后自动生成的
    p=QtGui.QPixmap()
    p.load(':\c.png')                                        #加载图片
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
sys.exit(app.exec_())

其中最关键需要替换的地方是

import c_rc

这句根据你的ui转py文件名写,我的py文件名是c_ro.py

p.load(':\c.png')

这句根据你的资源写,打包了什么资源在这里想调用就按这样的格式输入,比如我的资源是全名是c.png,就这样写,可以加载出图片,当然图片能否显示还会受这句

self.hxx.setGeometry(QtCore.QRect(-5, 1, 210, 210))

的影响,具体影响试验多次调整参数运行程序就知道了
这时候,我们只需要两个py文件就能显示出图片(或者调用其他如音频等资源,看你加入了什么了)
最后打包
一定不要在64位的win7上打包多个py,一定失败,原因不明,参https://www.cnblogs.com/sitongyan/p/10613672.html
可惜我的电脑刚好win7 64位,要是用别人电脑的话又缺少很多库
主文件a.py调用文件c.py
老方法在目录下打开cmd

pyinstaller a.py -p c.py --hidden-import c

如果不是win7 64位电脑,应该就可以成功得到exe了
最终截图(因为无法打包成exe,只有用py了)
支付宝到帐,5元

注意

tinker调用pyqt只要在class App里定义一个新的函数,内容就是调用pyqt5写的程序(注意缩进),并在tinker里设置一个按钮触发这个事件,以打包多个py文件的方式同时打包tk函数.py和资源文件.py即可

后续

关于tinker调用pyqt5之后部分程序无法打包成exe或即使打包后打开exe仍然无法调用图片的完全解决

https://mp.csdn.net/mdeditor/101165199#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值