PYQT5 简单项目实践

在VSCode编辑器我们通过引入pyqt5,用QTdesigner 实现拖拽实现图形化界面

下面我们实现一个简单项目实践一下吧

效果图:

用法:Python编写逻辑,用pyqt实现界面显示。

功能:

  1. 第一行把处理的数据文件拖拽到文本框中
  2. 第二行是对文件数据中相同项的哪一行取值的处理,比如取相同产品的第一条数据我们可以输入数值1
  3. 选择框B\R则是表示从前取值/从后取值

实现流程:

下面我们就直接讲述怎么拖拽实现图像化界

桌面先创建一个文件夹,vscode中打开该文件夹,右键(参考前一篇文章)启用pyqt的qtdesigner进行图形化界面设计,首先创建一个widget窗体。

再窗体上对组件进行拖拽设计,首先布局水平方向的设计,再水平方向上的基础上拖入lable,linetext,radiobutton,pushBotton组件,raddiobutton之间加入了横向的horizontal spacer 熟称弹簧使组件间具有一定的间隙。

设计完成后保存,如下图就会看到.UI的文件,pyuic5对其进行编译(前一篇文章有提)生成ui

-xxx.py文件

代码部分

整体代码结构(fristwin.py为启动文件;getdata.ui图形化设计,ui_getdata.py图形化设计的转译,以及getdataBR.py四个文件构成)

ui_getdataBR.py代码参考 

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

# Form implementation generated from reading ui file '/Users/a1234/Desktop/pyqt5/Getdata.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(515, 352)
        self.verticalLayoutWidget = QtWidgets.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(20, 10, 481, 311))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.label)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem)
        self.lineEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem1)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.verticalLayoutWidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout.addWidget(self.lineEdit_2)
        self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.radioButton.setObjectName("radioButton")
        self.verticalLayout.addWidget(self.radioButton)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem2)
        self.radioButton_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.radioButton_2.setObjectName("radioButton_2")
        self.verticalLayout.addWidget(self.radioButton_2)
        self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem3)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "该工具用于对数据进行处理取值(B是从前取值,R从后取值)"))
        self.lineEdit.setPlaceholderText(_translate("Form", "拖拽数据文件"))
        self.lineEdit_2.setPlaceholderText(_translate("Form", "输入数值获取几条数据"))
        self.radioButton.setText(_translate("Form", "B"))
        self.radioButton.setChecked(True)
        self.radioButton_2.setText(_translate("Form", "R"))
        self.pushButton.setText(_translate("Form", "提交"))

 getdataBR.py代码参考,定义一个类,对数据文件进行逻辑处理

import os
import pandas as pd
import numpy as np
import csv
class GetDataBR:
    def getvalue(data,reverse,countdata):
        data_temp=pd.read_csv(data,header=1,low_memory=False)
        with open(data,'r') as f:
            reader=csv.reader(f)
            header_row=next(reader)
            df =pd.read_csv(f,keep_default_na=False,low_memory=False)
            df_row = pd.DataFrame([header_row],columns=df.columns)
            df_fake = pd.DataFrame([df.columns],columns= df.columns)
            df_head = df.head(5)
        if reverse=="B":
            information=data_temp.groupby(['SerialNumber']).apply(lambda x: x.iloc[:countdata])
        elif reverse=="R":
            information=data_temp.groupby(['SerialNumber']).apply(lambda x:x.iloc[-countdata:])
        else:
            pass
        #print(information)
        datafinal = pd.concat([df_row,df_fake,df_head,information])
        filename = os.path.join(data.split(".")[0]+'append.csv')
        datafinal.to_csv(filename,header=None,index=False) 
        del data_temp
        return datafinal

 firstWin.py代码参考,把业务逻辑代码和界面设计进行联合实现一个简单的数据处理工具

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


import sys

from PyQt5.QtGui import QDropEvent
from GetDataBR import *
import os
from Ui_Getdata import Ui_Form
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow,QPushButton,QMessageBox,QFileDialog
from PyQt5 import QtCore

class MyMianWindow(QMainWindow,Ui_Form):
    def __init__(self, parent=None):
        super(QMainWindow,self).__init__(parent)
        self.setupUi(self)
        self.setWindowTitle('数据处理工具')
        self.setObjectName('win')
        self.setStyleSheet('#win{background-color:white;}')
        self.initButton()

    def initButton(self):
        self.lineEdit.installEventFilter(QEventHandler(self))
        self.pushButton.clicked.connect(self.process_msg)

    #定义一个函数实现数据处理功能
    def process_msg(self):
        load_csv =self.lineEdit.text()
        countdata=self.lineEdit_2.text()
        if self.radioButton.isChecked()==True:
            reverse=self.radioButton.text()
        elif self.radioButton_2.isChecked()==True:
            reverse=self.radioButton_2.text()
        else:
            pass
        print(load_csv,countdata,reverse)
        self.imessage=GetDataBR.getvalue(load_csv,reverse,int(countdata))
        if self.imessage.empty==True:
            QMessageBox.information(self, '提示', 'do not complete the task')
        else:
            QMessageBox.information(self, '提示', 'complete the task')

#定义事件处理机制文件的拖拽功能
class QEventHandler(QtCore.QObject):
    def eventFilter(self,obj,evnet):
        if evnet.type()==QtCore.QEvent.DragEnter:
            evnet.accept()
        if evnet.type()==QtCore.QEvent.Drop:
            md=evnet.mimeData()
            if md.hasUrls():
                url=md.urls()[0]
                obj.setText(url.toLocalFile())
                return True
        return super().eventFilter(obj,evnet)
    
if __name__=="__main__":
    app = QApplication(sys.argv)  
    ui=MyMianWindow() 
    ui.show()
    sys.exit(app.exec_())

到此就实现了开头所示的功能。

fighting~~~~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

017_基于python+django美术馆预约系统2024_802l04c5

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

GPIO口的学习

推挽输出 用它去控制一个mos管,当输出高电平时电流这样流出去,给外面的这颗mos管的栅极充电,所以这个过程称为推把电流推出去 然后当IO口输出低电平时电流这样流进来,给外面的这颗mos管的栅极放电,那这就是挽,把电流挽回来,所以所…

Android Framework AMS(06)startActivity分析-3(补充:onPause和onStop相关流程解读)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的补充,更新了startActivity流程分析部分。 一般来说,有Activ…

IT监控平台可视化:3D机房与设备监控的革新实践

在信息化高速发展的今天,IT运维行业面临着前所未有的挑战。随着数据中心规模的不断扩大和设备复杂度的日益提升,如何高效、准确地监控和管理这些设备,成为了运维团队亟待解决的问题。IT监控平台的可视化功能,尤其是3D机房与设备监…

从零开始学PHP之输出语句变量常量

一、 输出方式 在 PHP 中输出方式: echo,print,print_r,var_dump 1、echo和print为php的输出语句 2、var_dump,print_r为php的输出函数 (这里不做介绍)echo 和 print 区别 1、echo - 可以输出…

CSS3 提示框带边角popover

CSS3 提示框带边角popover。因为需要绝对定位子元素&#xff08;这里就是伪元素&#xff09;&#xff0c;所以需要将其设置为相对对位 <!DOCTYPE html> <html> <head> <title>test1.html</title> <meta name"keywords" con…

uniapp_微信小程序_echarts_动态折线图

##uniapp_微信小程序_echarts_动态折线图 用来总结和学习&#xff0c;便于自己查找 文章目录 一、为什么使用echarts折线图?          1.1 动态折线图echarts效果&#xff1f; 二、怎么导入echarts折线图&#xff1f;          2.…

spring boot 3.3.4 网关(gateway) 集成knife4j 4.4.0

spring boot版本 3.3.4&#xff0c;jdk 22&#xff0c; springcloud 2023.0.3 官方参考链接 Spring Cloud Gateway网关聚合 | Knife4j (xiaominfo.com) springboot版本信息 <properties> <java.version>22</java.version> <spring-cloud.version>2023…

LSTM反向传播及公式推导

先回顾一下正向传播的公式: 化简一下: 反向传播从下到上逐步求偏导: 对zt求偏导(预测值和标签值相减): zt对未知数wt,ht,bt分别求偏导: ht对ot,Ct求偏导: ot对Net0求偏导: Net0对w0,b0求偏导: .... 总体的思路就是那个公式从下到上逐步对未知数求偏导: 下面是总体的流程…

在Openshift(K8S)上通过EMQX Operator部署Emqx集群

EMQX Operator 简介 EMQX Broker/Enterprise 是一个云原生的 MQTT 消息中间件。 我们提供了 EMQX Kubernetes Operator 来帮助您在 Kubernetes 的环境上快速创建和管理 EMQX Broker/Enterprise 集群。 它可以大大简化部署和管理 EMQX 集群的流程&#xff0c;对于管理和配置的知…

微服务架构 --- 使用RabbitMQ进行异步处理

目录 一.什么是RabbitMQ&#xff1f; 二.异步调用处理逻辑&#xff1a; 三.RabbitMQ的基本使用&#xff1a; 1.安装&#xff1a; 2.架构图&#xff1a; 3.RabbitMQ控制台的使用&#xff1a; &#xff08;1&#xff09;Exchanges 交换机&#xff1a; &#xff08;2&#…

【双指针算法】快乐数

1.题目解析 2.算法分析 由图可知&#xff0c;不管是最后可以变成1的还是不可以变成1的都相当于形成环了&#xff0c;只是成环处值不一样 问题转变成&#xff0c;判断链表是否有环 采用双指针&#xff0c;快慢指针算法 1.定义快慢指针2.慢指针每次向后移动一步&#xff0c;快…

初识适配器模式

适配器模式 引入 生活中的例子&#xff1a;当我们使用手机充电时&#xff0c;充电器起到了转换器的作用&#xff0c;它将家用的220伏特电压转换成适合手机充电的5伏特电压。 适配器模式的三种类型 命名原则&#xff1a;适配器的命名应基于资源如何传递给适配器来进行。 类适配…

AnaTraf | 利用多点关联数据分析和网络关键KPI监控提升IT运维效率

目录 什么是多点关联数据分析&#xff1f; 多点关联数据分析的运用场景 监控网络关键KPI的重要性 典型的网络关键KPI 案例分析&#xff1a;利用多点关联数据分析和KPI监控解决网络性能问题 结语 AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具AnaTraf…

01 设计模式-创造型模式-工厂模式

工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 通过使用工厂模式…

SpringBoot框架下的汽车票在线预订系统

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

基于单片机的家用无线火灾报警系统的设计

1 总体设计 本设计家用无线火灾报警系统利用单片机控制技术、传感器检测技术、GSM通信技术展开设计&#xff0c;如图2.1所示为本次系统设计的主体框图&#xff0c;系统包括单片机主控模块、温度检测模块、烟雾检测模块、按键模块、GSM通信模块、液晶显示模块、蜂鸣器报警模块。…

汽车票预订系统:SpringBoot框架的优势

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

UE5 使用Animation Budget Allocator优化角色动画性能

Animation Budget Allocator是UE内置插件&#xff0c;通过锁定动画系统所占CPU的预算&#xff0c;在到达预算计算量时对动画进行限制与优化。 开启Animation Budget Allocator需要让蒙皮Mesh使用特定的组件&#xff0c;并进行一些编辑器设置即可开启。 1.开启Animation Budget…

地球链EACO怎么和房车旅游等行业结合起来加速全球发展?

地球链EACO怎么和房车旅游等行业结合起来加速全球发展&#xff1f; 将地球链&#xff08;EACO&#xff09;与房车,旅游&#xff0c;汽车等行业结合以加速全球发展&#xff0c;可以通过以下策略&#xff1a; 智能合约与租赁平台 去中心化租赁市场&#xff1a;建立一个基于EACO的…