【无标题】PyQt5初体验——一个简单的数据管理应用

过去10多年中,我一直断断续续地学习和开发Web应用,对桌面应用开发技术的认识还停留在大学时学习的VB。近段时间在工作中产生了一个在单机上运行一个小型数据管理软件的需求,于是开始学习使用PyQt5技术,断断续续大概1周时间基本上弄出来了,现记录一下。

软件需求

管理的数据只有一张表,10多个字段。要求:
1、能够根据其中的几个字段查询、筛选
2、能够添加数据,并对数据进行修改、删除等操作
3、能够把当前数据导出到Excel文件中。
4、数据列表能够翻页

界面

包括一个主窗口和一个编辑数据的子窗口(内含系列表单控件)。具体内容不便展示
双击主窗口中某一行记录时,会弹出子窗口。或者点击“添加”按钮 也会弹出子窗口。但表单控件的内容不同。

代码

1、主窗口 main.py

import os
import sys
import time
import math
from PyQt5.QtWidgets import (QApplication, QDialog, QMainWindow, QMessageBox)
from PyQt5 import QtWidgets, QtCore, QtGui
from main_ui import Ui_MainWindow     #这是利用PyQt5制作的主窗口界面,内含Ui_MainWindow类
from editDialog import editDialogClass#这是利用PyQt5制作的子窗口界面,内含editDialogClass类,具体为大量表单控件
import pymysql
from pymysql import cursors
import pandas as pd

#定义主窗口类,继承自PyQt5的QMainWindow类和自定义的主窗口界面Ui_MainWindow类
class MainWindowClass(QtWidgets.QMainWindow,Ui_MainWindow):
    fulldata = ()  # 完整数据集
    curpagedata = ()  # 当前页数据集
    curpage = 1  # 当前页码
    pagenum = 0  # 总页数
    rowperpage = 10  # 每页行数

    def __init__(self):
        super().__init__()
        self.setupUi(self)  #初始化界面元素
        self.showMaximized()#初始化时窗口最大化

        #初始化加载全部数据
        self.getData()
        self.arrangeDateEnd.setDate(QtCore.QDate.currentDate())  #修改一个日期控件中的显示值为当前日期

        #定义按钮功能
        self.addBtn.clicked.connect(self.addRow) #添加数据
        self.exitBtn.clicked.connect(self.exitSys)#退出系统
        self.queryBtn.clicked.connect(self.queryData)#开始查询
        self.clearBtn.clicked.connect(self.clearQuery)#清空查询条件
        self.delBtn.clicked.connect(self.delData)#删除数据
        self.summaryBtn.clicked.connect(self.makeSummary)
        self.exportBtn.clicked.connect(self.exportData)#导出数据

        #翻页按钮
        self.firstBtn.clicked.connect(self.gotoFirstPage) #首页
        self.lastBtn.clicked.connect(self.gotoLastPage) #末页
        self.pageupBtn.clicked.connect(self.gotoPrePage)#上一页
        self.pagedownBtn.clicked.connect(self.gotoNextPage)#下一页

        #创建子窗口实例,窗口尺寸不可调整,标题栏保留关闭按钮
        self.editDialogInstance=editDialogClass()
        self.editDialogInstance.setFixedSize(self.editDialogInstance.width(), self.editDialogInstance.height())
        self.editDialogInstance.setWindowFlags(QtCore.Qt.WindowCloseButtonHint)
        self.editDialogInstance._signal.connect(self.getData) #父窗口接收子窗口返回值,刷新数据

        #设置数据区域的列宽、行高
        self.queryRecordResult.setColumnWidth(0, 60)
        self.queryRecordResult.setColumnWidth(1, 100)
        self.queryRecordResult.setColumnWidth(2, 150)
        self.queryRecordResult.setColumnWidth(3, 150)
        self.queryRecordResult.setColumnWidth(4, 150)
        self.queryRecordResult.setColumnWidth(5, 200)
        self.queryRecordResult.setColumnWidth(6, 100)
        self.queryRecordResult.setColumnWidth(7, 370)
        self.queryRecordResult.setColumnWidth(8, 100)
        self.queryRecordResult.setColumnWidth(9, 100)
        self.queryRecordResult.setColumnWidth(10, 100)
        self.queryRecordResult.setColumnWidth(11, 100)
        self.queryRecordResult.setColumnWidth(12, 100)
        self.queryRecordResult.setColumnWidth(13, 100)

        #设置单元格高度根据内容自动调整
        self.queryRecordResult.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.ResizeToContents)

        #在状态栏显示当前时间
        timer = QtCore.QTimer(self)
        timer.timeout.connect(self.showtime)
        timer.start()

    #创建数据库连接的方法
    def connDB(self):
        db = pymysql.connect(host='localhost', user='root', password='mypwd', database='cluerecord')
        return db

    #获取当前日期时间的方法
    def showtime(self):
        datetime = QtCore.QDateTime.currentDateTime()
        text = datetime.toString("yyyy年MM月dd日 HH时mm分ss秒")
        self.statusbar.showMessage("当前日期时间:" + text, 0)

    #执行数据查询的方法,默认仅显示第1页数据
    def queryData(self):
        sql="select clueid,cluenum,cluesource,cluesourceunit,objname,objpost,objpostclass,left(content,50),left(receivedate,10),judge,arrangetype,receivedept,left(arrangedate,10),remark from records where 1=1"
        if self.clueSource.currentText()!="不限":
            sql+=" and cluesource ='"+self.clueSource.currentText()+"'"
        if self.objName.text()!="":
            sql+=" and objname ='"+self.objName.text()+"'"
        if self.objPost.text()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值