pyqt5实现的一个简单的登录和表格增删改查功能,基本实现大部分需求 您所在的位置:网站首页 eclipse连接mysql数据库并实现增删改查界面 pyqt5实现的一个简单的登录和表格增删改查功能,基本实现大部分需求

pyqt5实现的一个简单的登录和表格增删改查功能,基本实现大部分需求

#pyqt5实现的一个简单的登录和表格增删改查功能,基本实现大部分需求| 来源: 网络整理| 查看: 265

最近有个项目,需要做桌面端应用,所以就系统学习了下pyqt5的知识点,发现还是挺强大的。 做了多年的python码农,最终折腾了下,做了个大概的效果出来,基本满足数据库表增删改查功能了。 在这里插入图片描述 登录的代码逻辑 main.py

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'adminView.ui' # # Created by: PyQt5 UI code generator 5.15.2 # # 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.QtGui import QFont, QPixmap, QPalette, QBrush from PyQt5.QtWidgets import QStyleOption, QStyle, QWidget, QLabel, QPushButton, QLineEdit, QTableView, QGridLayout, \ QFileDialog, QMessageBox, QTableWidget, QFrame, QTableWidgetItem import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi from admin_view import AdminMainWindow from datetime import datetime class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) loadUi('login.ui', self) # 添加顶部logo图片 pixmap = QPixmap("img/header.png") scared_pixmap = pixmap.scaled(819, 518) label = QLabel(self) label.setPixmap(scared_pixmap) # 密码输入框设置加密显示 self.passwordLineEdit.setEchoMode(QLineEdit.Password) self.loginButton.setFont(QFont("Microsoft YaHei")) # self.loginButton.setStyleSheet("#loginButton{background-color:#2c7adf;color:#fff;border:none;border-radius:4px;}") self.loginButton.clicked.connect(self.login_check) self.showRegisterFrameButton.setFont(QFont("Microsoft YaHei")) # self.registerButton.setStyleSheet("#registerButton{background-color:#2c7adf;color:#fff;border:none;border-radius:4px;}") self.showRegisterFrameButton.clicked.connect(self.show_register_frame) self.showLoginFrameButton.clicked.connect(self.show_login_frame) self.registerButton.clicked.connect(self.register) self.registerFrame.setVisible(False) self.loginFrame.setVisible(True) def show_login_frame(self): """ 显示修改密码的frame """ self.registerFrame.setVisible(False) self.loginFrame.setVisible(True) def show_register_frame(self): """ 显示修改密码的frame """ self.loginFrame.setVisible(False) self.registerFrame.setVisible(True) def alarm(self, msg): """ 报警提示框 """ QMessageBox.warning(self, "提示框", msg, QMessageBox.Ok) def tips(self, msg): """ 正常提醒 :param msg: :return: """ QMessageBox.information(self, "提示框", msg, QMessageBox.Ok) def login_check(self): """ 登录认证 :return: """ global is_passed, role, phone phone = self.phoneLineEdit.text() password = self.passwordLineEdit.text() if not phone or not password: self.alarm('账号或者密码不能为空!') return if phone != 'admin' or password != '123456': QMessageBox.warning(self, "错误", "用户名或密码错误", QMessageBox.Yes) return else: role = '管理员' is_passed = 1 self.close() return def register(self): """ 注册 :return: """ phone = self.regPhoneLineEdit.text() pwd = self.regPasswordLineEdit.text() pwd2 = self.regPasswordLineEdit2.text() if not phone or not pwd or not pwd2: QMessageBox.warning(self, "错误", "有内容为空,请确认!", QMessageBox.Yes) return # 校验两次密码是否一致 if pwd != pwd2: QMessageBox.warning(self, "错误", "两次密码不一样!", QMessageBox.Yes) return QMessageBox.about(self, '成功', '注册成功,点击返回进行登录!') self.show_login_frame() if __name__ == "__main__": role = '' # 角色 phone = '' # 手机号 is_passed = 0 # 判断是否登录成功,成功后为1 with open('css.qss', encoding='utf-8') as f: qss = f.read() app = QApplication(sys.argv) app.setStyleSheet(qss) ex = MainWindow() window_pale = QPalette() window_pale.setBrush(ex.backgroundRole(), QBrush(QPixmap("img/bg.jpg"))) ex.setPalette(window_pale) ex.show() app.exec_() if is_passed == 0: sys.exit(0) app2 = QApplication(sys.argv) if role == '管理员': print('管理员登录') w = AdminMainWindow(phone=phone) w.show() else: QMessageBox.warning(ex, "错误", "非正常角色登录, 请联系管理管处理!", QMessageBox.Yes) sys.exit(app2.exec_())

管理员角色逻辑实现 admin_view.py

from PyQt5.QtWidgets import QStyleOption, QStyle, QWidget, QLabel, QPushButton, QLineEdit, QTableView, QGridLayout, \ QFileDialog, QMessageBox, QTableWidget, QFrame, QTableWidgetItem import sys from decimal import * from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi # from qtpy.QtCore import Qt class AdminMainWindow(QMainWindow): def __init__(self, parent=None, phone=None): super(AdminMainWindow, self).__init__(parent) loadUi('adminView.ui', self) self.setWindowTitle(f'欢迎 管理员') # 餐桌相关操作 self.searchTableButton.clicked.connect(self.search_table) # 搜索餐桌数据 self.insertTableButton.clicked.connect(self.insert_table) # 新增餐桌数据 self.saveTableButton.clicked.connect(self.save_table) # 保存餐桌数据 self.delTableButton.clicked.connect(self.delete_table) # 删除餐桌数据 # 系统-退出 self.exit.triggered.connect(self.close) # 配置frame的显示 self.tabWidget.setVisible(True) def alarm(self, msg): """ 报警提示框 """ QMessageBox.warning(self, "提示框", msg, QMessageBox.Ok) def tips(self, msg): """ 正常提醒 :param msg: :return: """ QMessageBox.information(self, "提示框", msg, QMessageBox.Ok) def show_table(self, table_widget, headers, data): """ 展示table数据 :return: """ row = len(data) # 获取行数 if not row: self.alarm('暂无数据!') table_widget.setRowCount(0) # 配置要显示的行数 table_widget.setColumnCount(len(headers)) # 配置要显示的行数 table_widget.setHorizontalHeaderLabels(headers) # 设置表头 return vol = len(data[0]) # 获取列数 table_widget.setRowCount(row) # 配置要显示的行数 table_widget.setColumnCount(vol) # 配置要显示的行数 table_widget.setHorizontalHeaderLabels(headers) # 设置表头 for i in range(row): # 循环展示数据 for j in range(vol): table_widget.setItem(i, j, QTableWidgetItem(str(data[i][j]))) self.tips('数据查询成功') def search_table(self): """ 查询餐桌 :return: """ floor = self.floorLineEdit.text() f, d = ['id', '楼层', '桌号', '可坐人数', '当前状态'], ((1, '1', '001', Decimal('151'), '空闲'), (5, '1', '002', Decimal('6'), '空闲'), (8, '2', '001', Decimal('5'), '空闲'), (9, '1', '004', Decimal('6'), '空闲'), (10, '1', '005', Decimal('8'), '空闲')) self.show_table(self.tableTableWidget, f, d) def insert_table(self): """ 新增一条餐桌数据,会在table中插入一条数据 只有点击保存的时候才会真正存储至数据库中 """ row = self.tableTableWidget.rowCount() self.tableTableWidget.insertRow(row) self.tableTableWidget.setItem(row, 0, QTableWidgetItem("")) self.tableTableWidget.setItem(row, 1, QTableWidgetItem("")) self.tableTableWidget.setItem(row, 2, QTableWidgetItem("")) self.tableTableWidget.setItem(row, 3, QTableWidgetItem("")) self.tableTableWidget.setItem(row, 4, QTableWidgetItem("空闲")) def save_table(self): """ 保存餐桌 :return: """ rows = self.tableTableWidget.rowCount() # 获取当前的行数 colomn = self.tableTableWidget.columnCount() # 获取当前的列数 print(f'{rows}行, {colomn}列') cards = [] # 去重告警 for i in range(rows): # 存储所有的card数据,判断是否有重复卡号 _tmp = [] # 临时存储一行数据 for c in range(colomn): item = self.tableTableWidget.item(i, c) if not item: self.alarm('有单元格数据为空,保存数据失败!') return item_text = item.text() # 处理空字符串 _tmp.append(item_text) # todo 这里做入库动作 self.tips('数据保存成功!') # 刷新一下数据 self.search_table() def delete_table(self): """ 删除餐桌 """ row_select = self.tableTableWidget.selectedItems() if len(row_select) == 0: return id = row_select[0].text() row = row_select[0].row() self.tableTableWidget.removeRow(row) # 以下可以加入保存数据到数据的操作 if id: print("id: {}".format(id)) # todo 数据库删除数据 self.tips('删除成功!') if __name__ == '__main__': app = QApplication(sys.argv) w = AdminMainWindow(phone='xxxxx') w.show() sys.exit(app.exec())

核心代码上面已放出,如需整套源码下载,一套完整的程序,解压即可正常执行~~~~有疑问或者有其他需求也欢迎私聊。

原创作品,未经同意,不得转载~~~~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有