基于深度学习的视觉检测小项目(十六) 用户管理界面的组态

news2025/4/24 4:08:38

分组和权限:

        用户分为三个组,管理员、普通用户、访客。

        • 管理员的权限和作业范围:

        添加和删除用户、更改所有用户的信息(用户名、登录密码、所在分组等)、查看和备份以及复制数据库;

        • 普通用户的权限和作业范围:

        更改自己的用户名和密码、开展工作业务、查看数据库;

        • 访客的权限和作业范围:

        查看数据库。

用于用户管理的界面:

既然用到了用户的管理,那么就必然涉及到用户列表的展示方式了。

        QT对于列表内容的展示方式有:QComboBox(下拉组合框)、QListView(列表视图)以及表格显示,表格显示的方式又有QTableView和QTableWidget两种,QTableView提供了一种前端视图和后端数据分离的模型框架,并且QTableView与数据库模型QSqlTableModel无缝衔接,具有强大的功能和灵活性,;QTableWidget 是一个结合了模型和视图的控件,已经内置了一个简单的表格模型,可以通过便捷的方法来操作表格数据,特别适合简单数据的处理。这里选择了表格方式,并使用QTableView作为表格窗口。

        在designer中新建QDialog界面文件:user_manage.ui,并在其上放置以下部件:

        通过合理设置各个部件的尺寸策略,使其能满足不同分辨率的屏幕显示:

        然后按照项目中别的画面的添加和设置方法,对其进行功能函数的编程:

from PySide6.QtCore import Slot
from PySide6.QtWidgets import QDialog, QMessageBox

from . import user_manage   # 导入使用uis工具从start_up.ui生成而来的start_up.py文件
from UI_proj.ui_project import uiproj     # 导入全局的ui项目对象
from DB_proj import db_set   # 导入数据库设置db_set.py
from UI_proj.functions.get_style_sheet import get_style_sheet  # 导入获取样式表的函数
from UI_proj.functions.form_center import center   # 导入窗口居中函数

# 定义窗口类
class UserManage(QDialog, user_manage.Ui_form_base):
    def __init__(self):
        super().__init__()
        self.setupUi(self)   # 加载窗口
        self.run()   # 初始化运行窗口

    def run(self):   # 窗口的运行函数
        # 设置窗口样式
        def set_style_sheet():  # 设置窗口样式
            style_sheet = get_style_sheet('settings/color_card.json', 'settings/color_setting.json', 'settings/style_uiproj.qss')  # 获取项目级别的样式表
            style_sheet += get_style_sheet('settings/color_card.json', 'settings/color_setting.json', 'ui_forms/user_manage/style_user_manage.qss')  # 获取本画面的本地样式表并与项目级别样式表合并
            self.setStyleSheet(style_sheet)  # 设置窗口样式
        set_style_sheet()  # 设置窗口样式

        # 设置窗口居中
        center(self)  # 设置窗口居中

        # 设置表格的查询数据
        def set_table_data():
            self.tableView.model.query.emit("SELECT 用户, 密码, 用户组 FROM users")  # 设置表格的查询数据
        set_table_data()  # 设置表格的初始化查询数据
        
        @Slot()
        # 点击退出按钮退出程序
        def on_btn_exit_clicked():
            self.close()  # 关闭窗口
        self.btn_exit.clicked.connect(on_btn_exit_clicked)  # 点击退出按钮退出程序

        @Slot()  # 点击“添加”按钮显示添加用户窗口
        def on_btn_add_clicked():  # 点击“添加”按钮显示添加用户窗口
            pass
            # uiproj.form_add_user.exec()  # 显示添加用户窗口
        self.btn_add.clicked.connect(on_btn_add_clicked)  # 点击“添加”按钮显示添加用户窗口

        @Slot()  # 点击“删除”按钮显示删除用户窗口
        def on_btn_delete_clicked():  # 点击“删除”按钮显示删除用户窗口
            pass
            # uiproj.form_delete_user.exec()  # 显示删除用户窗口
        self.btn_delete.clicked.connect(on_btn_delete_clicked)  # 点击“删除”按钮显示删除用户窗口

        @Slot()  # 点击“编辑”按钮显示编辑用户窗口
        def on_btn_edit_clicked():  # 点击“编辑”按钮显示编辑用户窗口
            pass
            # uiproj.form_edit_user.exec()  # 显示编辑用户窗口
        self.btn_edit.clicked.connect(on_btn_edit_clicked)  # 点击“编辑”按钮显示编辑用户窗口

        这里自定义了一个QTableView类,对表格的显示特性进行了定制,使得单击单元格选择整行,代码如下:

# 表格显示的模型,点击单元格选定整行

import sys
from PySide6.QtCore import Qt, Signal, Slot
from PySide6.QtGui import QColor
from PySide6.QtSql import QSqlDatabase, QSqlQueryModel
from PySide6.QtWidgets import QApplication, QTableView, QMainWindow, QWidget, QVBoxLayout, QPushButton, QFrame


# 自定义的表格模型
class TableModel(QSqlQueryModel):
    query = Signal(str)  # 信号,用于传递查询语句
    refresh = Signal()  # 信号,用于传递刷新提示

    def __init__(self):
        super().__init__()
        self._query = ""  # 重新定义查询语句
        self.run()  # 运行函数

    def run(self):
        @Slot()
        # 槽函数,用于执行查询
        def run_query(query):
            self._query = query  # 重新定义查询语句
            self.setQuery(self._query)  # 执行查询
            self.refresh.emit()  # 发射信号,传递刷新数据信号
        self.query.connect(run_query)  # 将槽函数与信号连接


# 自定义的表格视图
class TableView(QTableView):  # 继承QTableView
    def __init__(self, parent=None):
        super().__init__(parent)
        self.model = TableModel()  # 创建一个自定义的TableModel对象
        self.setSelectionBehavior(QTableView.SelectRows)  # 设置表格视图的选择行为为选择整行,而不是单个单元格
        # self.setShowGrid(False)  # 设置不显示网格线
        self.verticalHeader().setVisible(False)  # 设置隐藏行号
        self.verticalHeader().setDefaultSectionSize(50)  # 设置默认行高
        self.horizontalHeader().setDefaultSectionSize(103)  # 设置默认列宽
        self.run()  # 运行函数
    def run(self):
        @Slot()
        # 槽函数,用于刷新表格的显示
        def refresh():
            self.setModel(self.model)  # 设置表格视图的模型
        self.model.refresh.connect(refresh)  # 将槽函数与信号连接,当模型刷新时,发射信号,执行刷新函数

# 用法:
if __name__ == "__main__":
    app = QApplication(sys.argv)

    # 设置数据库
    def db_setup():
        db = QSqlDatabase.addDatabase("QSQLITE")  # 添加SQLite数据库驱动作为基础数据库
        db.setDatabaseName("example.db")  # 设置数据库名称
        db.open()  # 打开数据库
    db_setup()   # 设置数据库

    tabview = TableView()  # 创建一个自定义的TableView对象
    tabview.model.query.emit("SELECT * FROM users")  # 设置初始化的查询语句


    # 创建一个主窗口,将自定义的TableView对象作为主窗口的中央部件
    class MainWindow(QMainWindow):
        def __init__(self, table, parent=None):
            super().__init__(parent)
            self.table = table
            self.initUI()

        def initUI(self):
            layout = QVBoxLayout()  # 创建一个垂直布局
            layout.addWidget(self.table)  # 将自定义的TableView对象添加到布局中
            button = QPushButton("刷新")  # 创建一个按钮
            layout.addWidget(button)  # 将按钮添加到布局中
            central_widget = QWidget()  # 创建一个中央部件
            central_widget.setLayout(layout)  # 将布局添加到中央部件
            self.setCentralWidget(central_widget)  # 将中央部件设置为窗口的主部件

            button.clicked.connect(lambda: tabview.model.query.emit("SELECT name FROM users"))  # 设置刷新的查询语句

    window = MainWindow(tabview)
    window.show()
    sys.exit(app.exec())


        这个自定义的QTableView类由一个QTableView(表格显示)和一个QTableModel(表格模型)组成,QTableModel负责数据查询,QTableView负责前端显示,他们之间通过信号(Signal)来传递数据。在designer软件中将用户管理的ui中的表格小部件“提升为”自定义的类。

运行效果:

 下一步,对用户管理的编辑和添加、删除功能进行编程。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…

《2025,AI重塑世界进行时》

开年爆点,AI 浪潮再掀高潮 2025 年开年,AI 领域便热闹非凡,热点事件不断,让人深刻感受到这股科技浪潮正以汹涌之势奔腾而来。先是深度求索公司(DeepSeek)的 DeepSeek - R1 模型横空出世,迅速在国…

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本,例如“Visual Studio Community”(免费版本)&#x…

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程

一、tsp学习笔记——开发环境搭建

开发环境:window11 wsl ubuntu24.04 lypwslDESKTOP-39T8VTC:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.1 LTS Release: 24.04 Codename: noble工具安装 网络相关工具 sudo apt instal…

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据(4个) (1) 存量(DAU/MAU) (2) 新增用户 (3) 健康程度(留存率) (4) 渠道来源 2. 用户行为数据(4个) (1) 次数/频率…

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…

新春贺岁,共赴AGI之旅

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 往期精彩文章推荐 季姮教授独家文字版干货 | 面向知识渊博的大语言模型 关于AI TIME AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题…

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位,本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符(&) 功能:按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

Java面试题集合篇5:10道基础面试题

文章目录 前言41、多线程使用 ArrayList42、List 和 Set 区别43、HashSet 实现原理44、HashSet检查重复和保证数据不可重复45、BlockingQueue46、Map接口46.1、HashMap实现原理46.2、HashMap在JDK1.7和JDK1.8中不同点46.3、JDK1.7 VS JDK1.8 比较 47、HashMap的put方法流程48、…

汽车加气站操作工试题及答案​

1.天然气的主要成分是( )​ A. 乙烷 B. 乙烯 C. 甲烷 D. 乙炔​ 答案:C​ 2.加气站中,用来储存天然气的设备是( )​ A. 加气机 B. 压缩机 C. 储气井 D. 脱水装置​ 答案:C​ 3.以下哪…

企业四要素如何用PHP进行调用

一、什么是企业四要素? 企业四要素接口是在企业三要素(企业名称、统一社会信用代码、法定代表人姓名)的基础上,增加了一个关键要素,通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证&#x…

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…

【MySQL】MySQL经典面试题深度解析

文章目录 一、MySQL与C的深度结合1.1 为什么C项目需要MySQL?1.2 典型应用场景 二、基础概念面试题精讲2.1 存储引擎对比2.2 索引原理 三、C专项面试题解析3.1 连接池实现3.2 预处理语句3.3 批量操作优化 四、高级应用面试题剖析4.1 事务隔离级别4.2 锁机制详解4.3 查…

GitHub Copilot 越狱漏洞

研究人员发现了两种操控 GitHub 的人工智能(AI)编码助手 Copilot 的新方法,这使得人们能够绕过安全限制和订阅费用、训练恶意模型等。 第一种技巧是将聊天交互嵌入 Copilot 代码中,利用 AI 的问答能力,使其产生恶意输…

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理? 问题描述: UE成功打包APK并安装过后,启动应用时提示: No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …

吴恩达深度学习——卷积神经网络实例分析

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。 文章目录 LeNet-5AlexNetVGG-16ResNets残差块 1*1卷积 LeNet-5 输入层:输入为一张尺寸是 32 32 1 32321 32321的图像,其中 32 32 3232 3232是图像的长和宽&…

LabVIEW的智能电源远程监控系统开发

在工业自动化与测试领域,电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作,存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网(IIoT)技术,实现电源设备…

【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案

项目背景介绍 铁路货运企业需要对物流单进行长期存档,以便后续查询和审计。不同的物流单可能包含不同的关键信息,通过自定义指定多个区域进行识别重命名,可以使存档的图片文件名具有统一的规范和明确的含义。比如,将包含货物运单…

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的,而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8,它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…