pycharm 2020.2.3
python 3.8
pyqt5 5.15.1实现功能所需的界面
界面Python代码如下
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(0, 0, 341, 351))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(7)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(5, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(6, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(3, 0, item)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(460, 290, 101, 51))
self.pushButton.setObjectName("pushButton")
self.tableWidget_2 = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget_2.setGeometry(QtCore.QRect(10, 360, 331, 121))
self.tableWidget_2.setObjectName("tableWidget_2")
self.tableWidget_2.setColumnCount(2)
self.tableWidget_2.setRowCount(1)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setItem(0, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setItem(0, 1, item)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(460, 360, 101, 61))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(460, 220, 101, 51))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(460, 440, 101, 61))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(460, 120, 91, 61))
self.pushButton_5.setObjectName("pushButton_5")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("MainWindow", "2"))
item = self.tableWidget.verticalHeaderItem(2)
item.setText(_translate("MainWindow", "3"))
item = self.tableWidget.verticalHeaderItem(3)
item.setText(_translate("MainWindow", "4"))
item = self.tableWidget.verticalHeaderItem(4)
item.setText(_translate("MainWindow", "5"))
item = self.tableWidget.verticalHeaderItem(5)
item.setText(_translate("MainWindow", "6"))
item = self.tableWidget.verticalHeaderItem(6)
item.setText(_translate("MainWindow", "7"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "id"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "name"))
__sortingEnabled = self.tableWidget.isSortingEnabled()
self.tableWidget.setSortingEnabled(False)
self.tableWidget.setSortingEnabled(__sortingEnabled)
self.pushButton.setText(_translate("MainWindow", "添加数据"))
item = self.tableWidget_2.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget_2.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "id"))
item = self.tableWidget_2.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "name"))
__sortingEnabled = self.tableWidget_2.isSortingEnabled()
self.tableWidget_2.setSortingEnabled(False)
self.tableWidget_2.setSortingEnabled(__sortingEnabled)
self.pushButton_2.setText(_translate("MainWindow", "显示数据"))
self.pushButton_3.setText(_translate("MainWindow", "删除数据"))
self.pushButton_4.setText(_translate("MainWindow", " 修改数据"))
self.pushButton_5.setText(_translate("MainWindow", "清空页面"))
实现增删查改:
先安装pymsql
命令:pip install pymysql
安装完成后开头引用
import pymysql
之后在界面代码函数retranslateUi(self, MainWindow)里定义add(增添),delete(删除),modify(修改),show(显示),clear(清空)五个按钮,和与之相连接的函数的名字
五大按钮
add添加函数添加数据界面
添加数据:600 six
添加前:
添加后:
代码如下
结尾是定义的show显示函数,show函数尾部写了关闭游标,关闭连接的代码,所以add函数结尾就不用写相关代码了,同自定义的delete删除函数,modify修改函数
show显示函数
delete删除函数
输入需要删除行的id值
删除第一行数据
删除后:
删除函数代码:
modify修改函数:
修改第一行的three为seven
修改前:
修改后:
修改函数代码:
clear清空函数,用的是Python自带的clear()函数,用来清空页面上表格中显示的数据,并非是对数据库内部数值的清空
清空前:
清空后:
清空函数代码
最后的代码是通用的,只要是pyqt5生成的py文件,加上这段代码,就能稳定生成界面
最后附上整个文件的完整代码
import pymysql
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(0, 0, 341, 351))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(7)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(5, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(6, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(0, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(1, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(2, 1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setItem(3, 0, item)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(460, 290, 101, 51))
self.pushButton.setObjectName("pushButton")
self.tableWidget_2 = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget_2.setGeometry(QtCore.QRect(10, 360, 331, 121))
self.tableWidget_2.setObjectName("tableWidget_2")
self.tableWidget_2.setColumnCount(2)
self.tableWidget_2.setRowCount(1)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setItem(0, 0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setItem(0, 1, item)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(460, 360, 101, 61))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(460, 220, 101, 51))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(460, 440, 101, 61))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(460, 120, 91, 61))
self.pushButton_5.setObjectName("pushButton_5")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("MainWindow", "2"))
item = self.tableWidget.verticalHeaderItem(2)
item.setText(_translate("MainWindow", "3"))
item = self.tableWidget.verticalHeaderItem(3)
item.setText(_translate("MainWindow", "4"))
item = self.tableWidget.verticalHeaderItem(4)
item.setText(_translate("MainWindow", "5"))
item = self.tableWidget.verticalHeaderItem(5)
item.setText(_translate("MainWindow", "6"))
item = self.tableWidget.verticalHeaderItem(6)
item.setText(_translate("MainWindow", "7"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "id"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "name"))
__sortingEnabled = self.tableWidget.isSortingEnabled()
self.tableWidget.setSortingEnabled(False)
self.tableWidget.setSortingEnabled(__sortingEnabled)
self.pushButton.setText(_translate("MainWindow", "添加数据"))
item = self.tableWidget_2.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget_2.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "id"))
item = self.tableWidget_2.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "name"))
__sortingEnabled = self.tableWidget_2.isSortingEnabled()
self.tableWidget_2.setSortingEnabled(False)
self.tableWidget_2.setSortingEnabled(__sortingEnabled)
self.pushButton_2.setText(_translate("MainWindow", "显示数据"))
self.pushButton_3.setText(_translate("MainWindow", "删除数据"))
self.pushButton_4.setText(_translate("MainWindow", " 修改数据"))
self.pushButton_5.setText(_translate("MainWindow", "清空页面"))
self.pushButton.clicked.connect(self.add)#添加
self.pushButton_2.clicked.connect(self.show)#显示
self.pushButton_3.clicked.connect(self.delete)#删除
self.pushButton_4.clicked.connect(self.modify)#修改
self.pushButton_5.clicked.connect(self.clear)#清空
#添加函数
def add(self):
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234'
, port=3306#默认值
, db='work'#数据库名
, charset='utf8')
cur = conn.cursor()#创建游标
id = self.tableWidget_2.item(0, 0).text()
# 将输入用的表的第0行第0列的所输入在上面的数据赋值给id变量(计算机默认从0开始)
name = self.tableWidget_2.item(0, 1).text()#将第0行第1列所输入的数据赋值给name
sql = "INSERT INTO work1 (id,name) VALUES ("+ id +",'"+ name+ "')"
# insert into添加的数据即为赋值后id和name的值
cur.execute(sql)#执行SQL语句
conn.commit()#即connection.commit,上传有效数据
self.clear()#执行自定义的清空函数
self.show()#执行自定义的显示当前数据库数据的函数
#show显示函数
def show(self):
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234'
, port=3306
, db='work'
, charset='utf8')
cur = conn.cursor()
sql = "select * from work1"#从work1表中获取所有数据
cur.execute(sql)
data = cur.fetchall()#获取到的数据以元组的形式赋值给data
for i in range(len(data)):#遍历
for j in range(len(data[i])):
self.tableWidget.setItem(i,j,QtWidgets.QTableWidgetItem(str(data[i][j])))
#for的嵌套循环,依次在表的每个格中输出数据
cur.close()
conn.close()
def delete(self):
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234'
, port=3306
, db='work'
, charset='utf8')
cur = conn.cursor()
id = self.tableWidget_2.item(0, 0).text()#只输入需删除行的id值即可
sql="delete from work1 where id=" + id#删除work1表中指定id的列
cur.execute(sql)
conn.commit()
self.clear()
self.show()#自动更新,清空后全显
def modify(self):
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234'
, port=3306
, db='work'
, charset='utf8')
cur = conn.cursor()
id = self.tableWidget_2.item(0, 0).text()
name = self.tableWidget_2.item(0, 1).text()
sql="update work1 set name='" + name + "' where id=" + id#修改指定id的那一行的name列的值
cur.execute(sql)
conn.commit()
self.clear()
self.show()
def clear(self):
self.tableWidget.clear()#清空第一个表格的数据
self.tableWidget_2.clear()#清空第二个表格的数据
if __name__ == '__main__':#使pyqt5的界面在Python中顺利运行的通用代码
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
注意:从我的pycharm里复制出来直接粘贴,可能造成格式上的缩进错误,整个代码当前版本是没有问题的,完全可行
最后的最后,感谢舍友的神助攻,助我弄懂实验