Pyqt应用相关之与Excel的联接

news2024/11/17 1:29:37

        利用所学相关Pyqt实现对于Excel文件内部数据的处理,首先需要获取Excel的数据,在获取后进行保存处理即可完成相应的操作。

    def save_data_btn_click(self):
        dir = self.save_dir_text.text().strip()
        self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')

这是一个Python函数,名为save_data_btn_click,它的作用是保存数据到指定的文件中。该函数接受两个参数:self是一个pandas数据框对象,用于保存数据;dir是一个字符串,用于指定保存文件的路径。

在函数中,首先通过self.save_dir_text.text().strip()获取保存文件的路径,然后使用self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')将数据框保存到指定的文件中。

需要注意的是,在使用pandas库时,需要先安装该库,并将其添加到Python的模块搜索路径中。

 

    def view_data_btn_click(self):
        columns = self.data_group_column_text.text().strip()
        column_list = []
        if columns != '':
            column_list = columns.split(',')
        self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()
        print(self.data_frame_group)
        model = TableModelView(self.data_frame_group)
        self.table_view.setModel(model)

这是一个Python函数,名为view_data_btn_click,它的作用是显示数据框中的数据。该函数接受两个参数:self是一个pandas数据框对象,用于显示数据;columns是一个字符串,用于指定要显示的列名。

在函数中,首先通过self.data_group_column_text.text().strip()获取要显示的列名,然后使用self.data_frame_group.groupby(column_list, as_index=False).sum()将数据框按列名分组,并使用print(self.data_frame_group)打印分组后的数据。

接着,创建一个TableModelView对象,并将分组后的数据框作为参数传入。最后,使用self.table_view.setModel(model)TableModelView对象设置为数据框的模型。

 

    def save_dir_btn_click(self):
        save_path = QFileDialog.getExistingDirectory(self, 'chooselab', self.cwd)
        self.save_dir_text.setText(save_path + '/')

这是一个Python函数,名为save_dir_btn_click,它的作用是从用户那里获取保存文件的目录路径,并将其保存到一个字符串变量中。该函数接受两个参数:self是一个QFileDialog对象,用于获取用户选择的目录路径;save_path是一个字符串变量,用于保存用户选择的目录路径。

在函数中,首先使用QFileDialog.getExistingDirectory()方法获取用户选择的目录路径,并将其保存到save_path变量中。然后,将save_path变量设置为QFileDialog.getExistingDirectory()方法的返回值,以便在下次调用该函数时能够获取用户选择的目录路径。

 

    def data_source_btn_click(self):
        xlsx_file = QFileDialog.getOpenFileName(self, 'choosetxt', self.cwd, 'Excel File(*.xlsx)')
        self.data_source_text.setText(xlsx_file[0])
        self.data_frame = pd.read_excel(self.data_source_text.text().strip())
        print(self.data_frame)
        model = TableModelView(self.data_frame)
        self.table_view.setModel(model)

这是一个Python函数,名为data_source_btn_click,它的作用是从用户那里获取Excel文件的文件名,并将其保存到一个字符串变量中。该函数接受两个参数:self是一个QFileDialog对象,用于获取用户选择的文件路径;xlsx_file是一个字符串变量,用于保存用户选择的文件路径。

在函数中,首先使用QFileDialog.getOpenFileName()方法获取用户选择的文件路径,并将其保存到xlsx_file变量中。然后,将xlsx_file变量设置为QFileDialog.getOpenFileName()方法的返回值,以便在下次调用该函数时能够获取用户选择的文件路径。

接着,使用pd.read_excel()方法读取Excel文件,并将其保存到self.data_frame变量中。最后,创建一个TableModelView对象,并将self.data_frame变量作为参数传入。最后,使用self.table_view.setModel(model)TableModelView对象设置为数据框的模型。

汇总:

import sys
import os
from qdarkstyle import load_stylesheet_pyqt5
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import pandas as pd

class TableModelView(QAbstractTableModel):
    def __init__(self, data):
        QAbstractTableModel.__init__(self)
        self._data = data

    def rowCount(self, parent=None):
        return self._data.shape[0]

    def columnCount(self, parent=None):
        return self._data.shape[1]

    def data(self, index, role=Qt.DisplayRole):
        if index.isValid():
            if role == Qt.DisplayRole:
                return str(self._data.iloc[index.row(), index.column()])
        return None

    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self._data.columns[col]
        return None


class DataGroupSum(QWidget):
    def __init__(self):
        super(DataGroupSum, self).__init__()
        self.cwd = os.getcwd()
        self.init_ui()

    def init_ui(self):
        # 标题、图标设置
        self.setWindowTitle('Excel data lab')


        # 初始化水平布局
        hbox = QHBoxLayout()

        # 初始化栅格布局
        grid = QGridLayout()

        self.data_source_text = QLineEdit()
        self.data_source_text.setReadOnly(True)

        self.data_source_btn = QPushButton()
        self.data_source_btn.setText('data')
        self.data_source_btn.clicked.connect(self.data_source_btn_click)

        self.data_group_column = QLabel()
        self.data_group_column.setText('setlab')

        self.data_group_column_text = QLineEdit()
        self.data_group_column_text.setPlaceholderText('line1,line2...')

        self.save_dir_text = QLineEdit()
        self.save_dir_text.setReadOnly(True)

        self.save_dir_btn = QPushButton()
        self.save_dir_btn.setText('road')
        self.save_dir_btn.clicked.connect(self.save_dir_btn_click)

        self.view_data_btn = QPushButton()
        self.view_data_btn.setText('preview')
        self.view_data_btn.clicked.connect(self.view_data_btn_click)

        self.save_data_btn = QPushButton()
        self.save_data_btn.setText('save')
        self.save_data_btn.clicked.connect(self.save_data_btn_click)

        grid.addWidget(self.data_source_text, 0, 0, 1, 2)
        grid.addWidget(self.data_source_btn, 0, 2, 1, 1)
        grid.addWidget(self.data_group_column, 1, 0, 1, 1)
        grid.addWidget(self.data_group_column_text, 1, 1, 1, 2)

        grid.addWidget(self.save_dir_text, 2, 0, 1, 2)
        grid.addWidget(self.save_dir_btn, 2, 2, 1, 1)
        grid.addWidget(self.view_data_btn, 3, 0, 1, 2)
        grid.addWidget(self.save_data_btn, 3, 2, 1, 1)

        self.table_view = QTableView()
        self.table_view.setFixedWidth(500)
        self.table_view.setFixedHeight(400)

        hbox.addWidget(self.table_view)
        hbox.addLayout(grid)

        self.setLayout(hbox)

    def data_source_btn_click(self):
        xlsx_file = QFileDialog.getOpenFileName(self, 'choosetxt', self.cwd, 'Excel File(*.xlsx)')
        self.data_source_text.setText(xlsx_file[0])
        self.data_frame = pd.read_excel(self.data_source_text.text().strip())
        print(self.data_frame)
        model = TableModelView(self.data_frame)
        self.table_view.setModel(model)

    def save_dir_btn_click(self):
        save_path = QFileDialog.getExistingDirectory(self, 'chooselab', self.cwd)
        self.save_dir_text.setText(save_path + '/')

    def view_data_btn_click(self):
        columns = self.data_group_column_text.text().strip()
        column_list = []
        if columns != '':
            column_list = columns.split(',')
        self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()
        print(self.data_frame_group)
        model = TableModelView(self.data_frame_group)
        self.table_view.setModel(model)

    def save_data_btn_click(self):
        dir = self.save_dir_text.text().strip()
        self.data_frame_group.to_excel(dir + 'output.xlsx',sheet_name='datasum')


if __name__ == '__main__':
    app = QApplication(sys.argv)

    app.setStyleSheet(load_stylesheet_pyqt5())
    main = DataGroupSum()
    main.show()
    sys.exit(app.exec_())

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

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

相关文章

IMX6ULLPRO交叉编译第一个APP和第一个led驱动

目录 配置交叉编译工具链 永久生效 测试交叉编译工具链 第一个交叉编译程序 开发板运行 LED第一个驱动 开发板下操作 执行测试程序 配置交叉编译工具链 交叉编译工具链用来在 Ubuntu 主机上编译应用程序,而这些应用程序是在 ARM 等其他平台上运行…

GPT对SaaS领域有什么影响?

GPT火了,Chat GPT真的火了。 突然之间,所有人都在讨论AI,最初的访客是程序员、工程师、AI从业者,从早高峰写字楼电梯里讨论声,到村里大爷们的饭后谈资,路过的狗子都要和它讨论两句GPT的程度。 革命的前夜…

图像配准(匹配)与变化检测

文章目录 简介A Survey on Deep Learning-Based Change Detection from High-Resolution Remote Sensing Images 2022变化检测的基本框架基于神经网络的变化检测特征抽取变化检测的粒度场景级的变化检测(SLCD)目标级别的变化检测 Deep Learning-Based Ch…

全志v851s uart3 设置成普通串口收发

本文转载自:https://bbs.aw-ol.com/topic/3281/ 由于UART0 被设定为系统dubug 输出(简单来说就是将ttyS0 设定为console),所以使用UART3 作为普通的串口,进行与别的设备通信。 1. 查看硬件电路图SCH_Schematic1_2022…

安全防御 --- APT、密码学

APT 深度包检测技术:将应用层内容展开进行分析,根据不同的设定从而做出不同的安全产品。 深度流检测技术:与APS画像类似。会记录正常流量行为,也会将某些应用的行为画像描述出来。也可将加密流量进行判断,并执行相应措…

揭秘移动云大会展区前沿科技

2023年4月25日-26日 我们苏州金鸡湖国际会议中心见! 1场重磅主论坛、10场分论坛、2600㎡展区 数字中国新未来 尽在2023移动云大会 2023移动云大会设有中国移动和合作伙伴两大展区,联合40余家优质合作伙伴,全方位展示移动云在自主能力、行…

实验05:算法设计策略的比较与选择

1.实验目的: 比较同一问题,采用不同策略设计不同算法,分析和比较算法的性能。 2.实验内容: 自学第10章的10.1.1至10.1.3, 总结分析编程实现简单算法、分治法和动态规划算法的理论复杂度,编程实现这些算法。 3.实验…

C语言复习之顺序表(十五)

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c阶段>——目标C、Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享…

docker容器内的应用利用k8s configmap做配置中心

ConfigMap 能带来什么好处? 传统的应用服务都有自己的配置文件,各自配置文件存储在服务所在节点。如果配置出现变更,就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能,完整设计了一套配置中心,其核心对象就是…

基于Java+Spring+vue+element实现旅游信息管理平台系统

基于JavaSpringvueelement实现旅游信息管理平台系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

基于模型预测(MPC)的四轮转向车辆轨迹规划(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 在轨迹跟踪应用领域,通常 MPC 建模可根据机器人的控制方式选择基于运动学运动状态方程建模或者基于动力学运动状态…

深入探讨车载CAN协议的工作原理和应用场景

CAN概述 CAN(Controller Area Network)总线协议是一种数据通信协议,最初是由Bosch公司开发,用于汽车领域中的内部通讯。 CAN总线协议是一种串行通信协议,支持多主机和多从机之间的通讯,可以在不同的控制单…

典型的高可用设计(一):MinIO

为了更好的了解高可用设计,将各类常用服务关于高可用的设计原理汇总到一起,通过横向对比的方式去发现这些典型设计的共同之处和差异点。 一、部署方式 MinIO 有单机单硬盘、单机多硬盘、多机多硬盘三种部署模式。单机单硬盘存在单点风险,数据…

ElasticSearch 部署及安装ik分词器

ansiable playbook链接: https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点:公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es,以端口和配置文件来区分这三…

itop-3568 开发板系统编程学习笔记(18)LED 应用编程

【北京迅为】嵌入式学习之Linux系统编程篇 https://www.bilibili.com/video/BV1zV411e7Cy/ 个人学习笔记 文章目录 应用层操作 LED 的两种方式sysfs 方式控制 LED控制方法原理简介 编写 LED 应用程序 应用层操作 LED 的两种方式 应用层操作底层硬件有两种方法,分别…

数据治理与数据中台架构

随着工业 4.0 时代的到来,传统行业的数字化转型是大势所趋;将数据提高到数据要素层面,让传统的技术在新的场景下发挥出新的作用,是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年,聚焦于传统数据建模和数据…

PostgreSQL中的复制延迟

PostgreSQL是一个流行的开源关系数据库管理系统,PostgreSQL中可能遇到的一个常见问题是复制延迟。 在这篇博客中,我们将讨论什么是复制延迟,它为什么会发生,以及如何在PostgreSQL中减轻它。 什么是复制延迟? 复制延迟…

Flink系列-9、Flink DataStream的输入数据集Data Source

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录 addSource方…

【A component required a bean of type ‘xxx‘ that could not be found.】

在学谷粒商城项目的时候出现了以下问题: *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…