Python+PyQt5+MySQL实现天⽓管理系统
在本篇博客中,我利⽤Python语⾔其编写界⾯库PyQt5,然后通过连接MySQL数据库,实现了⼀个简单的天⽓管理⼩系统,该系统包含简单的增删查改四个主要功能。本⽂旨在解析实现的程序,能够让读者快速了解PyQt5图形界⾯库,然后可以初步实现这样⼀个⼩的系统程序。
PyQt5简介
PyQt5本⾝来⾃C++的界⾯库Qt,经过⼀系列的封装移植到Python⾥⾯,作为Python的⼀个图像界⾯库,它继承了Python语⾔简单易实现的特点,可以实现基本的界⾯效果。⾥⾯有许多类实现了我们想要的窗体、表格、⽂本、图像等功能。在这个项⽬中也有所涉及,博主也是初次学这个库,然后写了这个⼩项⽬,⾥⾯可能会有⼀些不合适的地⽅,望谅解。
天⽓系统数据库
我将天⽓系统数据存⼊MySQL数据库中,提取数据时⽤Python的pymysql库连接MySQL数据库,对数据库进⾏⼀系列操作。
这个数据库主要包含城市、时间、各个空⽓物质的含量、pm2.5、AQI指标等。如果需要数据可以在下⾯留⾔,我可以发给你们。
实现步骤
导⼊所需要⽤的Python包:PyQt5,pymysql……没有的可以直接⽤pip安装
创建所要编写的界⾯类,初始化界⾯
连接数据库,获取数据
建⽴表格、按钮布局
实现功能函数
测试
具体实现过程
#导⼊包
import pymysql
from functools import partial
from PyQt5.Qt import QWidget
from PyQt5 import QtGui,QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QFrame,QApplication,QDialog, QDialogButtonBox,
QMessageBox,QVBoxLayout, QLineEdit,QTableWidgetItem,QTableWidget,QHBoxLayout)
#建⽴界⾯类
class creat_view(QDialog):
def __init__(self,parent = None):
super(creat_view,self).__init__(parent)
#设置界⾯⼤⼩、名称、背景
self.setWindowTitle('Database')
self.setStyleSheet("background-image:url(tubiao_meitu.jpg)")
#窗体属性
self.setWindowFlags(Qt.Widget)
#连接数据库
db = t("localhost", "root", "password", "mysql",charset='utf8')
#获取游标、数据
cur = db.cursor()
data = cur.fetchall()
#数据列名
col_lst = [tup[0] for tup in cur.description]
#数据的⼤⼩
row = len(data)
vol = len(data[0])
#插⼊表格
self.MyTable = QTableWidget(row,vol)
font = QtGui.QFont('微软雅⿊',10)
#设置字体、表头
mysql下载appself.MyTable.horizontalHeader().setFont(font)
self.MyTable.setHorizontalHeaderLabels(col_lst)
#设置竖直⽅向表头不可见
self.MyTable.verticalHeader().setVisible(False)
self.MyTable.setFrameShape(QFrame.NoFrame)
#设置表格颜⾊            self.MyTable.horizontalHeader().setStyleSheet('QHeaderView::section{background:skyblue}')
#构建表格插⼊数据
for i in range(row):
for j in range(vol):
temp_data = data[i][j]  # 临时记录,不能直接插⼊表格
data1 = QTableWidgetItem(str(temp_data))  # 转换后可插⼊表格
self.MyTable.setItem(i, j, data1)
#编辑按钮
self.qle = QLineEdit()
buttonBox = QDialogButtonBox()
#增删查改四个按钮
addButton = buttonBox.addButton("&ADD",QDialogButtonBox.ActionRole)
okButton = buttonBox.addButton("&OK",QDialogButtonBox.ActionRole)
deleteButton = buttonBox.addButton("&DELETE",QDialogButtonBox.ActionRole)
inquireButton = buttonBox.addButton("&QUERY",QDialogButtonBox.ActionRole)
#设置按钮内字体样式
addButton.setFont(font)
okButton.setFont(font)
deleteButton.setFont(font)
inquireButton.setFont(font)
#垂直布局
layout = QVBoxLayout()
layout.addWidget(self.qle)
layout.addWidget(buttonBox)
layout.addWidget(self.MyTable)
self.setLayout(layout)
t(partial(self.add_data,cur,db))#插⼊实现
t(partial(self.up_data, cur, db,col_lst))#插⼊实现
t(partial(self.del_data,cur,db))#删除实现
t(partial(self.inq_data,db))#查询实现
t(partial(self.inq_data,db))#查询实现
#添加空表格
def add_data(self,cur,db):
#获取⾏数
row = wCount()
#在末尾插⼊⼀空⾏
self.MyTable.insertRow(row)
#插⼊数据
def up_data(self,cur,db,col_lst):
row_1 = wCount()
value_lst = []
for i in range(len(col_lst)):
if(len(self.MyTable.item(row_1-1,i).text())==0):
value_lst.append(None)
else:
value_lst.append(self.MyTable.item(row_1-1,i).text())
tup_va_lst = []
for cl,va in zip(col_lst,value_lst):
tup_va_lst.append((cl,va))
#插⼊语句
"INSERT INTO pm_25 VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",value_lst)
#删除
def del_data(self,cur,db):
#是否删除的对话框
reply = QMessageBox.question(self, 'Message', 'Are you sure to delete it ?', QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if reply ==  QMessageBox.Yes:
#当前⾏
row_2 = self.MyTable.currentRow()
del_d = self.MyTable.item(row_2, 0).text()
#在数据库删除数据
dbmit()
#删除表格
veRow(row_2)
#查询
def inq_data(self,db):
txt = ()
#模糊查询
if len(txt) != 0:
self.MyTable.clearContents()
row_4 = len(data_x)
vol_1 = len(cur.description)
#查询到的更新带表格当中
for i_x in range(row_4):
for j_y in range(vol_1):
for j_y in range(vol_1):
temp_data_1 = data_x[i_x][j_y]  # 临时记录,不能直接插⼊表格
data_1 = QTableWidgetItem(str(temp_data_1))  # 转换后可插⼊表格
self.MyTable.setItem(i_x, j_y, data_1)
#空输⼊返回原先数据表格
else:
self.MyTable.clearContents()
data_y = cur.fetchall()
row_5 = len(data_y)
vol_1 = len(cur.description)
for i_x_1 in range(row_5):
for j_y_1 in range(vol_1):
temp_data_2 = data_y[i_x_1][j_y_1]  # 临时记录,不能直接插⼊表格
data_2 = QTableWidgetItem(str(temp_data_2))  # 转换后可插⼊表格
self.MyTable.setItem(i_x_1, j_y_1, data_2)
def main():
#显⽰
app = QApplication(sys.argv)
c = creat_view()
c.show()
<_())
main()
界⾯展⽰
⼤致就这么多啦,只要掌握PyQt的基本使⽤⽅法和数据库的基本语法,做起来还是⽐较得⼼应⼿的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。