pyqt5 pyinstaller 打包 QThread QLable QscrollArea 滑动 红果短剧

请添加图片描述请添加图片描述

废话 不多说,直接上代码!!!

UI.py

        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)self.scrollArea.setGeometry(QtCore.QRect(20, 130, 541, 511))self.scrollArea.setWidgetResizable(True)self.scrollArea.setObjectName("scrollArea")

主文件

 # 自定义  QLable 实现 可点击 方法
class ClickableQLabel(QLabel):clicked = pyqtSignal()def __init__(self, parent=None):super().__init__(parent)def mousePressEvent(self, event):self.clicked.emit()# 渲染并处理 获取的 短剧信息
def select_function_callback(self, result):self.pushButton_select.setText('点击查询')if result.get("data"):self.duanju_select_data = result.get("data")self.image_label.setVisible(False)self.scrollArea.setVisible(True)self.scrollAreaWidgetContents = QtWidgets.QWidget()self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 539, 510))self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")data_num = len(result.get('data'))if data_num > 5:newHeight = 510 + ((data_num - 5) * 100)self.scrollAreaWidgetContents.setMinimumSize(540, newHeight)loguru.logger.info(f"self.duanju_select_data    ----   {len(self.duanju_select_data)}")for index, values in enumerate(self.duanju_select_data):for_frame = f"for_frame_{str(index)}"self.for_frame = QtWidgets.QFrame(self.scrollAreaWidgetContents)self.for_frame.setGeometry(QtCore.QRect(0, index * 100, 540, 101))self.for_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)self.for_frame.setFrameShadow(QtWidgets.QFrame.Raised)self.for_frame.setObjectName(for_frame)self.head_img = QtWidgets.QLabel(self.for_frame)self.head_img.setGeometry(QtCore.QRect(10, 10, 71, 81))self.head_img.setObjectName("head_img")# lable 显示 网络 图片right_video_headImg_url = QImage.fromData(requests.get(values.get('head_img')).content)self.head_img.setPixmap(QPixmap(right_video_headImg_url).scaled(QSize(70, 80)))font = QtGui.QFont()font.setFamily("微软雅黑")font.setPointSize(9)self.duanju_name = QtWidgets.QLabel(self.for_frame)self.duanju_name.setGeometry(QtCore.QRect(100, 40, 110, 30))self.duanju_name.setObjectName("duanju_name")self.duanju_name.setFont(font)self.duanju_name.setText(values.get('duanju_name'))self.duanju_type = QtWidgets.QLabel(self.for_frame)self.duanju_type.setGeometry(QtCore.QRect(225, 40, 60, 30))self.duanju_type.setObjectName("duanju_type")self.duanju_type.setFont(font)self.duanju_type.setText(values.get('duanju_type'))self.duanju_palyCount = ClickableQLabel(self.for_frame)self.duanju_palyCount.setGeometry(QtCore.QRect(320, 40, 40, 30))self.duanju_palyCount.setObjectName("duanju_palyCount")self.duanju_palyCount.setFont(font)self.duanju_palyCount.setText(str(int(values.get('duanju_palyCount'))))self.duanju_palyCount.clicked.connect(partial(self.on_qlable_clicked, values.get("duanju_palyCount")))self.duanju_jiShu = ClickableQLabel(self.for_frame)self.duanju_jiShu.setGeometry(QtCore.QRect(390, 40, 30, 30))self.duanju_jiShu.setObjectName("duanju_jiShu")self.duanju_jiShu.setFont(font)self.duanju_jiShu.setText(str(int(values.get('duanju_jishu'))))self.duanju_jiShu.clicked.connect(partial(self.on_qlable_clicked, values.get("duanju_jishu")))self.downloads_video = QtWidgets.QPushButton(self.for_frame)self.downloads_video.setGeometry(QtCore.QRect(455, 30, 60, 40))self.downloads_video.setObjectName("downloads_video")self.downloads_video.setFont(font)self.downloads_video.setText('下载')# 给 点击方法 绑定不同的值,self.downloads_video.clicked.connect(partial(self.downloads_video_click, values))self.scrollArea.setWidget(self.scrollAreaWidgetContents)else:self.showMsg("重要提示", result["msg"])# 下载 短剧视频
class DownloadsVideo(QThread):# 设置信号槽downloadsVideoSignal = pyqtSignal(str)def __init__(self):super(DownloadsVideo, self).__init__()self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"}self.video_id_list = []self.output_path = Noneself.manager = QNetworkAccessManager()def restart(self, video_id_list, output_path):self.video_id_list = video_id_listself.output_path = output_pathdef run(self):for video_info in self.video_id_list:video_id = video_info.get("vid")vidIndex = int(video_info.get("vidIndex"))get_videoDownload_url = f"http://0.0.0.0:5000/api/v1/xxxxxxxx/getmodel?id={video_id}"for i in range(10):request = QNetworkRequest(QUrl(get_videoDownload_url))request.setHeader(QNetworkRequest.UserAgentHeader, self.headers["User-Agent"])reply = self.manager.get(request)  # 使用 QNetworkAccessManager 发送异步请求event_loop = QEventLoop()reply.finished.connect(event_loop.quit)event_loop.exec_()if reply.error() == QNetworkReply.NoError:respon_text = reply.readAll().data().decode()loguru.logger.info(f"respon --- {respon_text}")status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)loguru.logger.info(f"Status code: {status_code}")if "url" in respon_text:respon = json.loads(respon_text)if respon.get("data").get("map"):download_url = respon.get("data").get("map").get("result").get("url")downloads_res = self.download_video(download_url, vidIndex)if downloads_res["is_downloads"]:self.downloadsVideoSignal.emit(f"{downloads_res['output_path_name']} 下载成功")else:self.downloadsVideoSignal.emit(f"{downloads_res['output_path_name']} 下载 失败")breakelse:status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)# loguru.logger.info(f"Status code: {status_code}")error_message = reply.errorString()# loguru.logger.info(f"Error message: {error_message}")if i == 9:self.downloadsVideoSignal.emit("当前视频无法下载")time.sleep(random.randint(1, 5))def download_video(self, download_url, vidIndex):filename = f"第{vidIndex}集.mp4"output_path_name = self.output_path + filename# print(f"output_path_name --- {output_path_name}")# 使用requests下载视频for i in range(10):response = requests.get(download_url, stream=True)# 检查响应状态码是否为200(成功)if response.status_code == 200:with open(output_path_name, 'wb') as f:for chunk in response.iter_content(chunk_size=1024):if chunk:  # 过滤掉keep-alive产生的空数据包f.write(chunk)# print(f"Video downloaded successfully to {output_path_name}")return {"is_downloads": True,"output_path_name": output_path_name}else:if i == 9:# print(f"Failed to download video. Response status code: {response.status_code}")return {"is_downloads": False,"output_path_name": output_path_name}time.sleep(random.randint(1, 3))# 点击 QLable 实现 粘贴板 复制
def on_qlable_clicked(self, values):loguru.logger.info(f"value --- {values}")clipboard = qApp.clipboard()clipboard.setText(str(int(values)))# 接收下载 视频 反馈的 信息
def download_video_callback(self, strIng):self.textBrowser.append(strIng)

自定义 QLable 实现 点击方法

class ClickableQLabel(QLabel):clicked = pyqtSignal()def __init__(self, parent=None):super().__init__(parent)def mousePressEvent(self, event):self.clicked.emit()

放置本地图片

self.image_label = QtWidgets.QLabel(self.centralwidget)
self.image_label.setGeometry(QtCore.QRect(20, 130, 540, 511))
# 加载本地图片
pixmap = QtGui.QPixmap(":aaa.jpeg")  # 替换为你的图片路径
if pixmap.isNull():print("无法加载图片")
else:# 设置 QLabel 的 pixmapself.image_label.setPixmap(pixmap)# 自动调整 QLabel 的大小以适应图片大小self.image_label.setScaledContents(True)

将 输入框 设置 只读

# 将 lineEdit 输入框 设置为 只读
self.folder_lineEdit.setReadOnly(True)

关闭 QScrollArea 水平滚动条

self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

选择 文件夹

# 选择 文件夹
def open_folder_dialog(self):folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")if folder_path:self.folder_lineEdit.setText(folder_path)else:self.showMsg('Error', '请选择一个文件夹')

打包 时 包换本地图片

	1、新建 ".qrc" 结尾 的文件 如:demo.qrc 2、将下面代码放入 demo.qrc 文件中:<RCC><qresource prefix="/"><file>文件名称</file>  <file>logo.ico</file><!-- 添加更多图片或其他资源 --></qresource></RCC>3、 命令行 执行 命令:pyrcc5 -o demo.py demo.qrc  4、将 主程序 中 用到图片 的地方 ,名称一定要和在 demo.qrc里面的一致 在地址前面 加 ":"   例如:pixmap = QtGui.QPixmap(":aaa.jpeg")  # 替换为你的图片路径self.setWindowIcon(QIcon(':logo.ico'))

点击方法

	# QButton 绑定 点击方法self.pushButton_select_file.clicked.connect(self.open_folder_dialog)# 实例化 类self.selectDuanjun = SelectDuanJu()# 定义 接收信号槽 返回信息 的 方法self.selectDuanjun.selectDuanJuSignal.connect(self.select_function_callback)

设置 pyqt5 打包 .exe 的左上角图标以及软件名称:

	self.setWindowTitle("HongGuoApp短剧下载")self.setWindowIcon(QIcon(':logo.ico'))

打包命令

pyinstaller -F -w -n 软件名称 -i .\newLogon.ico .\主程序.py .\demo.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2、vue3里面去掉访问地址中路由‘#‘号--nginx配置

需求 我们这里分享一下关于Vue2和Vue3里面如何去掉浏览器路由里面#号的问题&#xff0c;以及nginx的配置。 去掉#号问题之前我们先讨论一下html中的hash模式和history模式。 html中的hash模式 HTML的hash模式指的是URL中的锚点部分&#xff08;#后面的内容&#xff09;被用…

通信入门系列——微积分中极限、连续、导数、微分、积分

本节目录 一、极限 1、数列极限 2、函数极限 二、连续 三、导数 四、微分 五、积分本节内容 一、极限 1、数列极限 数列极限&#xff1a;设{xn}为一个实数列&#xff0c;A为一个定数。若对任意给定的ε>0&#xff0c;总存在正整数N,使得当n>N时&#xff0c;有|xn-A|<…

linux搭建SRS服务器

linux搭建SRS服务器 文章目录 linux搭建SRS服务器SRS说明实验说明搭建步骤推流步骤查看web端服务器拉流步骤final SRS说明 SRS&#xff08;simple Rtmp Server&#xff09;,是一个简单高效的实时视频服务器&#xff0c;支持RTMP/WebRTC/HLS/HTTP-FLV/SRT, 是国人自己开发的一款…

常见面试题之HTML

行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素有那些&#xff1f; HTML 中的行内元素&#xff08;inline elements&#xff09;通常用于在一行内显示&#xff0c;不会独占一行的空间。常见的行内元素有&#xff1a; <span>&#xff1a;用于对文本…

【蓝桥杯日记】第一篇——系统环境的搭建

目录 前言 环境相关文件 学生机环境-Web应用开发环境&#xff08;第十五届大赛&#xff09; 学生机环境-Java编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-C/C编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-Python编程环境 &#xff08;第十五届…

hardware simulation——框架搭建

目录 引子 代码风格约束 代码结构和模板 引子 前几天有人拿个word文档&#xff0c;问我怎么实现&#xff0c;概括一下就是用c实现数码管显示。 但是咱们肯定不做这么简单这么点&#xff0c;我打算做个开源的项目&#xff0c;可以一直更新底层软件库&#xff0c;和上层显示库…

物联网介绍

阅读引言&#xff1a; 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网&#xff08;Internet of Things&#xff0c;IOT&#xff1b;也称为Web of Things&#xff09;是指通过各种信息传感设 备&#xff0c;如传感器、…

KPI/Key Performance Indicator

一、KPI 关键绩效指标&#xff08;Key Performance Indicator&#xff0c;简称KPI&#xff09;是通过对组织内部流程的输入端、输出端的关键参数进行设置、取样、计算、分析&#xff0c;衡量流程绩效的一种目标式量化管理指标&#xff0c;是把企业的战略目标分解为可操作的工作…

nmealib库编译提示 undefined reference to `ceil‘

一、问题描述 下载了nmealib库文件&#xff0c;默认工程进行编译&#xff0c;报错&#xff0c;提示如下&#xff1a; gcc -I include -c src/generate.c -o build/nmea_gcc/generate.o gcc -I include -c src/generator.c -o build/nmea_gcc/generator.o ar rsc lib/libnm…

@KafkaListener指定kafka集群

基于KafkaListener注解的kafka监听代码可以手动指定要消费的kafka集群&#xff0c;这对于需要访问多套kafka集群的程序来说&#xff0c;是有效的解决方案。这里需要注意的是&#xff0c;此时的消费者配置信息需使用原生kafka的配置信息格式&#xff08;如&#xff1a;ConsumerC…

win桌面图标间距变大如何调整

1、win键R-->输入regedit-->回车 2、 找到 IconSpacing 和 IconVerticalSpacing -->HKEY_CURRENT_USER-->Control Panel-->Desktop-->WindowMetrics-->IconSpacing-->IconVerticalSpacing 3、分别将其值改成-1125&#xff08;系统默认的值&#xff09…

手写RPC框架(手写dubbo框架)

提示&#xff1a;dubbo底层实现&#xff0c;手写dubbo框架。手写rpc框架、用servlet实现dubbo、用servlet实现rpc框架 文章目录 前言一、实现步骤描述1.1、provider的原理1.2、consumer的原理&#xff1a; 二、代码实现2.1、api项目2.1.12.1.22.1.3 2.2、provider项目2.2.1、pr…

椋鸟C语言笔记#33:文件的顺序读写

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 光标&#xff08;文件位置指示器&#xff09; 文件的顺序读写 fgetc 使用实例 fputc 使用实例 fgets fputs 使用实例 fscanf fprintf fread fwrite 使用实例 光标&#xff08;文件位置指示器&#xff09; 我们…

在程序中链接静态库 和 动态库

9. 链接库 在编写程序的过程中&#xff0c;可能会用到一些系统提供的动态库或者自己制作出的动态库 或者静态库文件&#xff0c;cmake中也为我们提供了相关的加载动态库的命令hehedalinux:~/Linux/loveDBTeacher-v3$ tree . ├── CMakeLists.txt ├── include │ └── …

鸿蒙开发-UI-组件-状态管理

鸿蒙开发-序言 鸿蒙开发-工具 鸿蒙开发-初体验 鸿蒙开发-运行机制 鸿蒙开发-运行机制-Stage模型 鸿蒙开发-UI 鸿蒙开发-UI-组件 文章目录 前言 一、什么是状态管理 二、管理组件拥有的状态 1.组件内状态 State装饰器 2.父子组价单向同步 Prop装饰器 3.父子双向同步 Link装…

Linux下动态库和静态库编译实践

Linux下动态库和静态库编译实践 背景动态库&#xff08;.so文件&#xff09;静态库(.a文件)关于GLIBC 背景 之前写过JNI的文章&#xff0c;在JNI实践过程中&#xff0c;也涉及到对动态库/静态库的一些编译实践&#xff0c;这里统一记录一下。 动态库&#xff08;.so文件&…

RWKV入门

主要参考资料 B站视频《【项目原作解读】RWKV Foundation侯皓文&#xff1a;新型RNN模型RWKV&#xff0c;结合Transformer的并行化训练优势和RNN的高效推理》 RWKV官网: https://www.rwkv.com/ 目录 前言RWKV由来模型架构关键结果劣势未来展望 前言 RNN无法并行化&#xff0c;…

CPU告警不用愁,用C语言编写CPU使用率限制程序

现在云服务已经深入千家万户了&#xff0c;不仅商用&#xff0c;私用也很多。很多云服务厂商也都有配套的服务器安全模块&#xff0c;可以检测网络流量异常、内存占用量和CPU占用率&#xff0c;并且允许人工设置告警阈值。例如&#xff0c;CPU持续大于90%10分钟&#xff0c;那么…

华为机试真题实战应用【赛题代码篇】-选修课(附Java、C++和python代码)

目录 题目描述 思路解析 代码实现 Java JS C++ 代码2 python

ESU毅速丨制造企业需不需要建设增材制造中心?

随着科技的不断发展&#xff0c;增材制造技术已经成为制造行业的新宠。越来越多的企业开始考虑建设增材制造中心&#xff0c;以提高生产效率、降低成本、加速产品创新。但是&#xff0c;对于制造企业来说&#xff0c;是否需要建设增材制造中心呢&#xff1f; 首先&#xff0c;我…