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

这篇具有很好参考价值的文章主要介绍了【Python】Pyside2 可视化实现:每秒复制源文件一行到目标文件并打印日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

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

效果:

【Python】Pyside2 可视化实现:每秒复制源文件一行到目标文件并打印日志,Python,自己开发的小工具,python文章来源地址https://www.toymoban.com/news/detail-802545.html

代码:

import sys
import threading
import time

import openpyxl
import pandas as pd
from PySide2.QtWidgets import QApplication, QWidget, QFileDialog
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QIODevice

sourceFilePath = ""     # 源文件路径
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.textEdit
        loader = 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_data
        file_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 targetFilePath
        file_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 = 1
    print(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).value
            target_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 += 1

        if 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_())

到了这里,关于【Python】Pyside2 可视化实现:每秒复制源文件一行到目标文件并打印日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据可视化项目—基于Python豆瓣电影数据可视化分析系统的设计与实现

    本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据,我们提供了一个全面的电影信息平台,为用户提供深入了解电影产业趋势、影片评价与演员表现的工具。项目的关键步骤包括

    2024年02月04日
    浏览(52)
  • 基于Python的豆瓣电影数据分析可视化系统的设计与实现-可视化分析大屏

    收藏关注不迷路 本文拟采用Python技术和Django 搭建系统框架,后台使用MySQL数据库进行信息管理,设计开发基于python的豆瓣电影数据分析可视化系统。通过调研和分析,系统拥有管理员和用户两个角色,主要具备个人中心、电影管理、用户管理、系统管理等功能模块。将纸质管

    2024年02月03日
    浏览(64)
  • 可视化 | 教你用Python实现热力图(一)

    本文正在参与新星计划Python学习方向,详情请看:(93条消息) lifein的博客_CSDN博客-SQL SERVER,计算机三级——数据库领域博主 目录 一、导引 二、内容 (一)地图热力图:(动态地图) 1、环境搭建: 2、地图代码:(原始)         在可视化中,热力图可以使用颜色深浅

    2024年02月05日
    浏览(40)
  • 网络特征之PCA可视化-Python实现

    PCA也是对网络特征可视化的一种方法,目的是对特征进行降维,然后通过图片的形式来对网络的特征提供一种解释。 所以,本博客提供一个将网络特征进行PCA的可视化的代码,其原理为将C通道的特征降维到3通道,即图片的RGB通道,然后直接进行可视化。 关于PCA和t-SNE的差异

    2023年04月08日
    浏览(51)
  • 【7月最新实现】使用Python获取全网招聘数据,实现可视化分析

    哈喽兄弟们,今天来实现采集一下最新的qcwu招聘数据。 因为网站嘛,大家都爬来爬去的,人家就会经常更新,所以代码对应的也要经常重新去写。 对于会的人来说,当然无所谓,任他更新也拦不住,但是对于不会的小伙伴来说,网站一更新,当场自闭。 所以这期是出给不会

    2024年02月12日
    浏览(36)
  • 基于python开发实现数学中各种经典曲线的可视化

    今天正好有点时间就想着把之前零星时间里面做的一点小东西整合一下梳理出来,本文的核心目的就是想要基于python来开发实现各种有趣的数学曲线的可视化展示。 笛卡尔心形线是一种二维平面曲线,由法国数学家笛卡尔在17世纪提出。它得名于其形状类似于传统的心形符号

    2024年02月10日
    浏览(44)
  • SVM(支持向量机)基于Python的简单可视化实现

    本篇内容参考了这篇博客且内容不涉及数学证明,只是自己学习SVM时记下的内容,方便回顾 什么是SVM?维基百科中对于SVM的定义是这样的: 支持向量机 (英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学

    2024年02月08日
    浏览(54)
  • Python flask + Mysql +Echarts :实现数据可视化(玫瑰图)

    步骤一:建立Myslq数据库连接 步骤二:开发Flask应用 步骤三:创建前端页面(house_bing.html ) 步骤四:运行Flask应用并查看玫瑰图 render_template():调用了”render_template()”方法来渲染模板。方法的第一个参数”echarts.html”指向你想渲染的模板名称,第二个参数”data”是你要传

    2024年02月22日
    浏览(46)
  • 基于Python+大数据城市景观画像可视化系统设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作 ✌ 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年03月21日
    浏览(43)
  • python电影数据可视化分析系统的设计与实现【附源码】

    (一)开题报告,就是确定设计(论文)选题之后,学生在调查研究的基础上撰写的研究计划,主要说明设计(论文)研究目的和意义、研究的条件以及如何开展研究等问题,也可以说是对设计(论文)的论证和设计。开题报告是提高设计(论文)质量和水平的重要环节。 (二)开题报告主要

    2024年01月17日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包