基于深度学习的视觉检测小项目(十七) 用户管理后台的编程

完成了用户管理功能的阶段。下一阶段进入AI功能相关。所有的资源见文章链接。

补充完后台代码的用户管理界面代码:

import sqlite3

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

from . import user_manage   # 导入使用uis工具从user_manage.ui生成而来的user_managep.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)  # 设置窗口样式
            # print(style_sheet)  # 打印样式表
        set_style_sheet()  # 设置窗口样式

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

        # 设置表格的初始化查询数据
        def set_table_data():
            self.tableView.model.query.emit("SELECT id, 用户, 密码, 用户组 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():  # 点击“添加”按钮显示添加用户窗口
            uiproj.form_user_edit.label_top.setText("添加用户")
            uiproj.form_user_edit.exec()  # 显示添加用户窗口
            uiproj.form_user_edit.user_details.emit(["","","", ""])  # 发送用户详情信号到用户编辑窗口
        self.btn_add.clicked.connect(on_btn_add_clicked)  # 点击“添加”按钮显示添加用户窗口

        @Slot()  # 点击“删除”按钮显示删除用户窗口
        def on_btn_delete_clicked():  # 点击“删除”按钮显示删除用户窗口
            indices = self.tableView.selectedIndexes()  # 获取选定的表格索引
            if indices:
                if QMessageBox.question(self, "提示", "确定要删除吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
                    user_row = self.tableView.model.record(indices[0].row())  # 选定的内容的第一行
                    user_id = user_row.value("id")  # 获取用户id
                    db_set.delete_user(user_id)   # 删除用户信息
                    QMessageBox.information(self, "提示", "用户已删除!")  # 弹出提示对话框
                    uiproj.form_user_manage.tableView.model.query.emit(
                        "SELECT id, 用户, 密码, 用户组 FROM users")  # 设置表格的查询数据,刷新显示
        self.btn_delete.clicked.connect(on_btn_delete_clicked)  # 点击“删除”按钮显示删除用户窗口

        @Slot()  # 点击“编辑”按钮显示编辑用户窗口
        def on_btn_edit_clicked():  # 点击“编辑”按钮显示编辑用户窗口
            indices = self.tableView.selectedIndexes()   # 获取选定的表格索引
            if indices:
                user_row = self.tableView.model.record(indices[0].row())  # 选定的内容的第一行
                user = [user_row.value("id"),
                        user_row.value("用户"),
                        user_row.value("密码"),
                        user_row.value("用户组")]  # 构建用户元组
                uiproj.form_user_edit.user_details.emit(user)    # 发送用户详情信号到用户编辑窗口
                uiproj.form_user_edit.label_top.setText("编辑用户")
                uiproj.form_user_edit.exec()  # 显示编辑用户窗口
        self.btn_edit.clicked.connect(on_btn_edit_clicked)  # 点击“编辑”按钮显示编辑用户窗口

补充完后台代码的用户编辑界面代码:

import sqlite3

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

from . import user_edit   # 导入使用uis工具从user_edit.ui生成而来的user_edit.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 UserEdit(QDialog, user_edit.Ui_form_base):
    user_details = Signal(list)    # 定义信号,用于传递用户信息详情
    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_edit/style_user_edit.qss')  # 获取本画面的本地样式表并与项目级别样式表合并
            self.setStyleSheet(style_sheet)  # 设置窗口样式
            # print(style_sheet)  # 打印样式表
        set_style_sheet()  # 设置窗口样式
        # 设置窗口居中
        center(self)  # 设置窗口居中

        @Slot()
        # 点击退出按钮退出程序
        def on_btn_exit_clicked():
            uiproj.form_user_edit.user_details.emit(["", "", "", ""])  # 发送用户详情信号到用户编辑窗口
            self.close()  # 关闭窗口
        self.btn_exit.clicked.connect(on_btn_exit_clicked)  # 点击退出按钮退出程序

        @Slot()
        # 点击“提交保存”按钮保存用户信息
        def on_btn_submit_clicked():
            # 获取用户信息
            user_id = self.lineEdit_ID.text()
            user_name = self.lineEdit_name.text()
            user_passwd = self.lineEdit_passwd.text()
            user_group = self.combo_group.currentText()
            # 判断用户信息是否为空
            if user_name == "" or user_passwd == "" or user_group == "":
                QMessageBox.warning(self, "警告", "用户信息不能为空!")  # 弹出警告对话框
                return
            else:
                if user_id == "":  # 如果用户id为空,则为添加用户
                    db_set.create_user(user_name, user_passwd, user_group)   # 添加用户
                    QMessageBox.information(self, "提示", "新用户已添加!")  # 弹出提示对话框
                else:
                    db_set.edit_user(user_name, user_passwd, user_group, user_id)   # 编辑用户
                    QMessageBox.information(self, "提示", "用户信息保存成功!")  # 弹出提示对话框
                # uiproj.conn.commit()  # 提交数据库

                # c.close()  # 关闭游标
                self.close()  # 关闭窗口
                uiproj.form_user_manage.tableView.model.query.emit("SELECT id, 用户, 密码, 用户组 FROM users")  # 设置表格的查询数据,刷新显示
                uiproj.form_login.all_users.emit()   # 发送所有用户信号到登录窗口,用以更新登录窗口下拉列表的内容


        self.btn_submit.clicked.connect(on_btn_submit_clicked)  # 点击“提交保存”按钮保存用户信息

        @Slot()
        def user_details_emit(user):  # 传递用户详细信息信号
            self.lineEdit_ID.setText(str(user[0]))   # 传递用户id信号
            self.lineEdit_name.setText(user[1])      # 传递用户名信号
            self.lineEdit_passwd.setText(user[2])    # 传递用户密码信号
            self.combo_group.setCurrentText(user[3])  # 传递用户组信号
            # self.user_id.emit(self.id)  # 传递用户id信号
            # print(user)
        self.user_details.connect(user_details_emit)  # 传递用户详细信息信号

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntuCUDA安装

系列文章目录 移动硬盘制作Ubuntu系统盘 前言 根据前篇“移动硬盘制作Ubuntu系统盘”安装系统后,还不能够使用显卡。 如果需要使用显卡,还需要进行相关驱动的安装(如使用的为Nvidia显卡,就需要安装相关的Nvidia显卡驱动&#xff…

Docker Compose的使用

文章首发于我的博客:https://blog.liuzijian.com/post/docker-compose.html 目录 Docker Compose是什么Docker Compose安装Docker Compose文件Docker Compose常用命令案例:部署WordPress博客系统 Docker Compose是什么 Docker Compose是Docker官方的开源…

【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?

技术铁幕下的暗战:当算力博弈演变为代码战争 一场针对中国AI独角兽的全球首例国家级密码爆破,揭开了数字时代技术博弈的残酷真相。DeepSeek服务器日志中持续跳动的美国IP地址,不仅是网络攻击的地理坐标,更是技术霸权对新兴挑战者的…

使用python实现与本地ollama部署的deepseek对话

专栏总目录 按照ollama官方doc的example操作,没有成功与本地ollama上的deepseek-r1:1.5b通讯后,发现vscode可以调用本地ollama上的deepseek模型。 为了实现与ollama上的deepseek模型通讯,我使用wireshark对本地回环地址进行侦听后&#xff0c…

基于STM32的智能健康监测手环

1. 引言 随着可穿戴设备的普及,健康监测技术正逐步融入日常生活。本文设计了一款基于STM32的智能健康监测手环,能够实时采集用户心率、血氧饱和度、体温及运动数据,并通过低功耗蓝牙(BLE)与手机APP交互。该系统结合了…

OpenGL学习笔记(六):Transformations 变换(变换矩阵、坐标系统、GLM库应用)

文章目录 向量变换使用GLM变换(缩放、旋转、位移)将变换矩阵传递给着色器坐标系统与MVP矩阵三维变换绘制3D立方体 & 深度测试(Z-buffer)练习1——更多立方体 现在我们已经知道了如何创建一个物体、着色、加入纹理。但它们都还…

麦芯(MachCore)应用开发教程5 --- 工位和晶圆传输

麦芯是构建在windows系统上的设备应用操作系统,利用该系统可以快速高效的开发一款设备专用软件。希望进一步了解请email: acloud163.com 黄国强 2025/02/03 一、工位与子设备的关系 想象工厂中的流水线工作站,每个工位(Station&#xff09…

冰蝎v3.0 beta7来啦

我用了一台kali,一台centos,一台windows,做了一个文件上传和一个反弹shell实验,载荷是AES加密的,终于感受到了对加密流量的无可奈何~ kali(php8.1)centos(php7.1)window…

Golang 并发机制-5:详解syn包同步原语

并发性是现代软件开发的一个基本方面,Go(也称为Golang)为并发编程提供了一组健壮的工具。Go语言中用于管理并发性的重要包之一是“sync”包。在本文中,我们将概述“sync”包,并深入研究其最重要的同步原语之一&#xf…

【PyQt】超级超级笨的pyqt计算器案例

计算器 1.QT Designer设计外观 1.pushButton2.textEdit3.groupBox4.布局设计 2.加载ui文件 导入模块: sys:用于处理命令行参数。 QApplication:PyQt5 应用程序类。 QWidget:窗口基类。 uic:用于加载 .ui 文件。…

Flutter Scaffold 页面结构

Material是一套设计风格,提供了大量的小部件,这里用Material风格搭建一个常见的应用页面结构。 创建Material应用 import package:flutter/material.dart;class App extends StatelessWidget {overrideWidget build(BuildContext context) {return Mat…

2月3日星期一今日早报简报微语报早读

2月3日星期一,农历正月初六,早报#微语早读。 1、多个景区发布公告:售票数量已达上限,请游客合理安排行程; 2、2025春节档总票房破70亿,《哪吒之魔童闹海》破31亿; 3、美宣布对中国商品加征10…

大模型本地化部署(Ollama + Open-WebUI)

文章目录 环境准备下载Ollama模型下载下载Open-WebUI 本地化部署的Web图形化界面本地模型联网查询安装 Docker安装 SearXNG本地模型联网查询 环境准备 下载Ollama 下载地址:Ollama网址 安装完成后,命令行里执行命令 ollama -v查看是否安装成功。安装成…

10 Flink CDC

10 Flink CDC 1. CDC是什么2. CDC 的种类3. 传统CDC与Flink CDC对比4. Flink-CDC 案例5. Flink SQL 方式的案例 1. CDC是什么 CDC 是 Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数…

【25考研】南开软件考研复试复习重点!

一、复试内容 复试采取现场复试的方式。复试分为笔试、机试和面试三部分。三部分合计100分,其中笔试成绩占30%、机试成绩占30%、面试成绩占40%。 1.笔试:专业综合基础测试 考核方式:闭卷考试,时长为90分钟。 笔试考查内容范围…

【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox

在设计放大器的第一步就是确定好晶体管参数和直流工作点的选取。通过阅读文献,我了解到L波段低噪声放大器的mos器件最优宽度计算公式为 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p​23​ωLCox​Rs…

【leetcode练习·二叉树拓展】归并排序详解及应用

本文参考labuladong算法笔记[拓展:归并排序详解及应用 | labuladong 的算法笔记] “归并排序就是二叉树的后序遍历”——labuladong 就说归并排序吧,如果给你看代码,让你脑补一下归并排序的过程,你脑子里会出现什么场景&#xff…

[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置

2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方,在空白处鼠标右键选择通过Code打开 打开Vscode,点击platformIO图标,选择PIO Home下的open,最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…

Docker 部署教程jenkins

Docker 部署 jenkins 教程 Jenkins 官方网站 Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI)和持续交付(CD)过程。它帮助开发人员自动化构建、测试和部署应用程序,显著提高软件开发的效率和质量…

MySQL锁类型(详解)

锁的分类图,如下: 锁操作类型划分 读锁 : 也称为共享锁 、英文用S表示。针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,相互不阻塞的。 写锁 : 也称为排他锁 、英文用X表示。当前写操作没有完成前,它会…