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, QtWidgetsclass 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.translateForm.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_tempreturn datafinal

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

# -*- coding: utf-8 -*-import sysfrom 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 QtCoreclass 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:passprint(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 Truereturn super().eventFilter(obj,evnet)if __name__=="__main__":app = QApplication(sys.argv)  ui=MyMianWindow() ui.show()sys.exit(app.exec_())

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

fighting~~~~~~

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

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

相关文章

powerdesign字体太小,powerdesign Sql preview字体太小

一。powerdesign字体太小修改兼容性 右键点击PowerDesign软件图标-->点击属性-->兼容性-->点击下图中的红框 打勾“使用此设置修复此程序的缩放问题,而不是设置中的缩放问题” 打勾“替代高DPI缩放行为” 缩放执行改为“系统增强”,确定 重启…

页面中包含多个el-popover,点击其中一个显示,其他的关闭(多个el-popover,click触发,点击都不消失的问题)

问题背景:需求是el-tree中的每个树节点后都有一个按钮,点击触发el-popover的显示,但是由click触发的el-popover,在点击下一个节点时,之前的都不消失。 解决办法:注:最主要的就是:ref"data…

Git_IDEA集成Git

Git_IDEA集成Git 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 定位 Git 程序 初始化本地库 添加到暂存区 提交到本地库 切换版本 创建分支 切换分支 合并分支 解决冲突 配置 Git 忽略文件 创建忽略规则文件 引用忽略配置文件 在 .gitconfig 文件中进行&…

房屋租赁网站毕业设计基于SpringBootSSM框架的计算机毕业设计

计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 一、项目背景与目的‌ ‌二、系统需求分析‌ 2.1功能需求 2.2 技术需求 2.3 可执行性 ‌三、系统设计与实现‌ ‌3.1系统架构设计‌: ‌3.2功能模块开发‌: ‌3.3…

AWD的复现

学习awd的相关资料:速成AWD并获奖的学习方法和思考记录- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者(包含使用脚本去批量修改密码) 在复现之前去了解了以下AWD的相关脚本 资料:AWD批量攻击脚本使用教程-CSDN博客 …

全新子比主题7.9.2开心版 子比主题最新版源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 wordpress zibll子比主题7.9.2开心版 修复评论弹授权 可做付费下载站 含wordpress搭建视频教程zibll子比主题安装视频教程支付配置视频教程,视频都是语音讲解,…

Go:error处理机制和函数

文章目录 error处理机制函数函数作为参数匿名函数匿名函数和闭包闭包运用闭包与工厂模式使用闭包调试 error处理机制 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功:返回某个值以及 true 表示成功;返回零值&…

2024软件测试面试秘籍(含答案+文档)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师…

超简洁的B端系统,还是看国外的设计.

国外的一些 B 端系统设计往往注重简洁性和实用性的完美结合。 从界面布局来看,它们通常采用简洁明快的线条和清晰的模块划分,避免了过多的装饰和繁杂的元素,使得用户能够快速聚焦于核心功能。 色彩方面,多选用中性色调或淡雅的色…

自由学习记录(13)

服务端常见的“资源” 在服务端,常见的“资源”指的是服务端提供给客户端访问、使用、处理或操作的各种数据和功能。根据不同类型的服务和应用场景,服务端的资源种类可以非常广泛。以下是一些常见的服务端资源类型: 1. 文件和静态资源 网页…

设计模式04-创建型模式1(简单工厂/工厂模式/抽象工厂/Java)

3.1 简单工厂模式 3.1.1 创建型模式 创建型设计模式将对象的创建过程和对象的使用过程分离,用户使用对象时无需关注对象的创建细节,外界对于这些对象只需要知道它们共同的接口,而不用清楚其实现细节,使得整个系统的设计更加符合…

console.log(“res.data = “ + JSON.stringify(res.data));

res.data[object Object] 说明你在控制台打印 res.data 时,它是一个 JavaScript 对象,而不是字符串。这种情况下,console.log 输出的 [object Object] 表示它无法直接显示对象的内容。 要查看 res.data 的实际内容,你需要将其转换…

​​Spring6梳理17——基于XML的自动装配

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①引入 ②场景模拟 2.1 创建UserController类文件 2.2 创建UserService接口文件 2…

关于jmeter中没有jp@gc - response times over time

1、问题如下: jmeter没有我们要使用的插件 2、解决方法: 选择下面文件,点击应用; 3、问题解决 ps:谢谢观看!!!

Java面向对象(三)(抽象和封装)(自己学习整理的资料)

一.类的提炼过程 从现实生活中归纳总结出,多种相同物种,具有的相同的特性(属性+行为)提炼到一个容器里,给这个容器起一个名字,名字就是类。 步骤: 发现类(Dog&#xff…

亿佰特STM32MP13工业核心板【学习】

资料链接:ebyte.com/serchlist.aspx?keyECK10 加屏蔽罩的方法确实可以防EMC干扰防水防潮: 宽度: 16 位宽表示数据总线的宽度,意味着每次可以传输 16 位的数据。这在某些应用中可以提高内存带宽。电压: DDR3L SDRAM 的工作电压通常为 1.35V&…

32 类和对象 · 中

目录 一、类的默认成员函数 二、构造函数 (一)构造函数的特点 (二)使用例 1、Date类 2、Stack类 (三)总结 三、析构函数 (一)析构函数的特点 (二)使…

scrapy的xpath在控制台可以匹配,但是到了代码无法匹配(无法匹配tbody标签)

问题 使用xpath-helper可以匹配到,然后scrapy却无法 然后写入html来看看 发现根本就没有tbody,太可恶了 解决 方法1 不使用tbody就可以 方法2 使用或运算符 | big_list response.xpath("//div[classChannelClasssNavContent]/table/tbody/tr[1]/td/table/tbody/t…

Android OpenGL天空盒

在我们的项目学习过程中,我们从一片漆黑的虚空开始构建。为了给这个世界增添一些色彩,我们加入了三个粒子喷泉,但即便如此,我们的世界依然大部分被黑暗和虚无所笼罩。这些喷泉仿佛悬浮在无尽的黑暗之中,没有边界&#…

玫瑰花HTML源码

HTML源码 <pre id"tiresult" style"font-size: 9px; background-color: #000000; font-weight: bold; padding: 4px 5px; --fs: 9px;"><b style"color:#000000">0010000100000111101110110111100010000100000100001010111111100110…