【Python】Pyside2 可视化实现:每秒复制源文件一行到目标文件并打印日志

背景:

博主在某个项目中,需要模拟每秒钟生成一行数据,所以有了该博客的想法,其中有线程的内容,为了防止主界面卡住

效果:

在这里插入图片描述

代码:

import sys
import threading
import timeimport openpyxl
import pandas as pd
from PySide2.QtWidgets import QApplication, QWidget, QFileDialog
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QIODevicesourceFilePath = ""     # 源文件路径
targetFilePath = ""     # 目标文件路径
source_data = None      # 源文件数据class MyWindow:def __init__(self):# 从文件中加载UI定义self.load_ui()# 绑定事件# 给 选择源文件 按钮 绑定事件self.ui.btn_selectSourceFile.clicked.connect(self.click_selectSourceFile)# 给 选择目标文件 按钮 绑定事件self.ui.btn_selectTargetFile.clicked.connect(self.click_selectTargetFile)# 给 开始复制 按钮 绑定事件self.ui.btn_runCopy.clicked.connect(self.click_runCopy)# 连接文本编辑器的文本变化信号到滚动到底部的槽self.ui.textEdit_log.textChanged.connect(self.scroll_to_bottom)def load_ui(self):# 从文件中加载UI定义ui_file_name = 'UI/WriteMain.ui'ui_file = QFile(ui_file_name)if not ui_file.open(QIODevice.ReadOnly):print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")sys.exit(-1)# 从 UI 定义中动态 创建一个相应的窗口对象# 注意:里面的控件对象也成为窗口对象的属性了# 比如 self.ui.button , self.ui.textEditloader = QUiLoader()self.ui = loader.load(ui_file)ui_file.close()if not self.ui:print(loader.errorString())sys.exit(-1)# 选择源文件 按钮 单击事件def click_selectSourceFile(self):global sourceFilePath, source_datafile_name = QFileDialog.getOpenFileName(self.ui, "选择源文件", "../Data",'Excel files (*.xls *.xlsx);; All files (*)')  # 选择文件,返回选中的文件路径print(file_name)if file_name:file_name = file_name[0]self.file_name = file_name# 根据文件类型读取数据if file_name.endswith('.xls') or file_name.endswith('.xlsx'):sourceFilePath = file_name# 读取Excel文件# source_data = pd.read_excel(file_name)# print(source_data)self.ui.lineEdit_sourcePath.setText(file_name)else:# 无法识别的文件类型print('无法识别的文件类型')return# 选择目标 按钮 单击事件def click_selectTargetFile(self):global targetFilePathfile_name = QFileDialog.getOpenFileName(self.ui, "选择目标文件", "../Data",'Excel files (*.xls *.xlsx);; All files (*)')  # 选择文件,返回选中的文件路径print(file_name)if file_name:file_name = file_name[0]self.file_name = file_name# 根据文件类型读取数据if file_name.endswith('.xls') or file_name.endswith('.xlsx'):targetFilePath = file_name# 显示文件名称self.ui.lineEdit_targetPath.setText(file_name)else:# 无法识别的文件类型print('无法识别的文件类型')return#  运行 按钮 单击事件def click_runCopy(self):t_write = threading.Thread(target=write_row_by_second, )t_write.setDaemon(True)t_write.start()# 更新日志def update_log(self, msg):self.ui.textEdit_log.append(msg)def scroll_to_bottom(self):# 获取垂直滚动条scrollbar = self.ui.textEdit_log.verticalScrollBar()# 设置滚动条到最下面scrollbar.setValue(scrollbar.maximum())def write_row_by_second():global sourceFilePath,  targetFilePath# 获取源文件的总行数source_workbook = openpyxl.load_workbook(sourceFilePath)source_sheet = source_workbook.active  # 假设源文件只有一个工作表total_rows = source_sheet.max_row# 初始化计数器row_to_copy = 1print(f"total_rows={total_rows}")while row_to_copy <= total_rows:# 打开目标文件target_workbook = openpyxl.load_workbook(targetFilePath)target_sheet = target_workbook.active  # 假设目标文件只有一个工作表# 复制数据,每次复制一行,,所有列for col in range(1, source_sheet.max_column + 1):cell_value = source_sheet.cell(row=row_to_copy, column=col).valuetarget_sheet.cell(row=row_to_copy, column=col, value=cell_value)# 保存目标文件target_workbook.save(targetFilePath)target_workbook.close()# 打印信息print(f"Copied data from row {row_to_copy}: {source_sheet[row_to_copy]}")msg = f"Copied data from row {row_to_copy}\n"window.update_log(msg=msg)# 增加行计数row_to_copy += 1if row_to_copy <= total_rows:# 1秒复制一行time.sleep(1)# 关闭源文件的工作簿source_workbook.close()if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.ui.show()sys.exit(app.exec_())

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

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

相关文章

安泰高压功率放大器在半导体测试中的应用

高压功率放大器在半导体测试中扮演着重要的角色。半导体测试是指对半导体器件进行各种电性能参数测试和质量检测的过程。以下是关于高压功率放大器在半导体测试中的应用的详细介绍。 一、高压信号发生器&#xff1a; 在半导体测试中&#xff0c;需要模拟高压环境下的工作条件以…

如何统一给文件夹名加后缀?这个方法教你一键搞定

随着计算机的普及&#xff0c;我们每天都会处理大量的文件和文件夹。有时候&#xff0c;为了更好地管理和分类文件&#xff0c;我们会给文件夹统一加上后缀。给文件加上后缀后最直接的好处就是方便文件管理。当我们给文件夹加上后缀时&#xff0c;我们可以很容易地根据后缀来判…

new mars3d.graphic.PolygonEntity({计算平面几何中心点及贴地效果展示

1.Mars3d提供了几何图形相关点位的计算方法polyutil&#xff1a; PolyUtil - V3.7.0 - Mars3D API文档 2.通过api可以算出相关经纬度坐标&#xff0c;实现相关中心点的展示 &#xff1a; 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 3.相关实现代码&#xff1a; fu…

AI Agent:大模型的下一个高地

科技云报道原创。 当所有人都沉浸在与ChatGPT对话的乐趣中&#xff0c;一场静水流深的变革已然启动。 2023年11月&#xff0c;比尔盖茨发表了一篇文章&#xff0c;他表示&#xff0c;AI Agent将是大模型之后的下一个平台&#xff0c;不仅改变每个人与计算机互动的方式&#x…

九、Qt C++ 毕业设计 数据库相关

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计-CSDN博客》 …

如何使用Lychee结合内网穿透搭建私人图床网站并发布至公网远程访问

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

一键批量翻译日语文件名至中文,轻松管理你的文件库!

你是否曾经因为日语文件名的困扰而感到头疼&#xff1f;随着中日交流的日益频繁&#xff0c;我们经常需要在中文环境下处理日语文件。为了更好地管理和使用这些文件&#xff0c;将日语文件名翻译成中文变得尤为重要。现在&#xff0c;有了我们的批量文件名翻译工具&#xff0c;…

PLM项目管理系统是什么? PLM项目管理系统的优势

PLM项目管理系统是什么 PLM&#xff0c;全称Product Lifecycle Management&#xff0c;即产品生命周期管理。它就像一个大管家&#xff0c;帮助企业打理产品研发的各种数据和流程&#xff0c;它是一个工具&#xff0c;一个强大的工具&#xff0c;让企业可以统一管理产品研发数…

Transformer原理与代码实现

Transformer原理与代码实现 概览 一、嵌入层 Embedding 二、位置编码 Positional Encoding 三、&#xff08;整合&#xff09;Transformer嵌入层 Transformer Embedding 四、带缩放的点积注意力机制 Scaled Dot-Product Attention 五、多头注意力 Multi-Head Attention 六…

ThingsPanel部署和使用

前置条件&#xff1a; 首先默认大家有一台服务器或者云服务器并且已经搭建好环境。小编是基于Linux宝塔环境以Docker安装ThingsPanel平台。 一.Docker和Docker-compose 1.概述 Docker是一个开源的容器化平台&#xff0c;它可以帮助开发者将应用程序与其依赖项打包到一个轻量…

keycloak部署

https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip 1.上传zip 并解压 uzip keycloak-11.0.2.zip 2.创建mysql数据库 CREATE SCHEMA keycloak DEFAULT CHARACTER SET utf8 ; 3.安装mysql的jdbc驱动 下载mysql的JDBC驱动&#xff08;mysql-connector-java-8…

springboot设置统一响应头——无效?接口无响应?

背景 对接一个关联方系统&#xff0c;我这边需要提供几个接口。对方要求&#xff0c;这些接口有统一的响应格式&#xff0c;并且有统一的响应头。统一的响应头包含如下&#xff1a; {"TT-Encrypt":"noaction","Content-Encoding":"gzip&q…

【已解决】c++如何打印变量的类型

本博文源于笔者正在编写的c代码&#xff0c;在c/c中我们经常用auto去接一个变量&#xff0c;这样我们既可以不用知道变量或函数结果的类型&#xff0c;就可以轻松愉快编码&#xff0c;如果想要知道变量的类型呢&#xff1f;那就需要这样一个函数。 问题再现 想要用函数去打印…

C++- VS2022-创建ATL 有QT库的工程

1.创建带QT库的ATL工程 创建 ATL COM 项目&#xff1a;在 Visual Studio 2022 中&#xff0c;选择 "文件" -> "新建" -> "项目"&#xff0c;然后在 "创建新项目" 对话框中选择 "Visual C" -> "ATL" 类别…

【网络安全】【密码学】【北京航空航天大学】实验三、数论基础(下)【C语言实现】

实验三、数论基础&#xff08;下&#xff09; 一、实验内容 1、中国剩余定理&#xff08;Chinese Remainder Theorem&#xff09; &#xff08;1&#xff09;、算法原理 m1, m2, … mk 是一组两两互素的正整数&#xff0c;且 M m1 m2 … mk 为它们的乘积, 则如下的同余…

9.1、加密技术原理详解

目录 一、加解密定义 二、加密技术分类 2.1、对称加密 2.2、非对称加密 三、对称加密算法 四、非对称加密算法 五、对称加密和非对称加密比较 六、对称加密和非对称加密结合 一、加解密定义 数据加密&#xff1a;对原来为明文的文件或数据按某种算法进行处理&#x…

MK-米客方德TF卡和SD卡的区别

TF卡和SD卡的区别 TF卡也叫MicroSD卡&#xff0c;以MK-米客方德的TF卡和SD卡为例&#xff0c;TF卡和SD卡的区别如下&#xff1a; 1、物理尺寸&#xff1a; TF卡&#xff1a;TF卡是一种较小尺寸的存储卡&#xff0c;也被称为MicroSD卡。其尺寸为15mm 11mm 1mm。 SD卡&#x…

odoo16 销售订单中数量与单价,手机录入不方便

odoo16 销售订单中数量与单价&#xff0c;手机录入不方便 在销售订单中&#xff0c;服装批发&#xff0c;数量与单价均是整数&#xff0c;系统默认的为保留两位小数的float类型&#xff0c;输入起来很不方便&#xff0c;如何修改 电脑版&#xff0c;输入时&#xff0c;自动选取…

国外客户工厂还是贸易商,该怎么回答

在和客户沟通的时候&#xff0c;我们最常遇到也最头疼的问题就是客户询问我们是工厂还是贸易商的时候&#xff0c;我们该怎么回答呢&#xff1f;万一回答错误了客户不搭理我们了应该怎么办呢&#xff1f; 先来看看我们常用的回答方式&#xff0c;是不是有你常用的&#xff1f;…

安装tesseract

Tesseract OCR是一款由HP实验室开发由Google维护的开源OCR引擎&#xff0c;在字符识别领域发挥着举足轻重的作用。除了使用软件自带的中英文识别库&#xff0c;我们可以使用Tesseract OCR训练属于自己的字库。 下载地址&#xff1a;https://digi.bib.uni-mannheim.de/tesseract…