如何用Qt-Designer制作一个登录界面并验证数据库账号进行登录

QT制作一个简单登录界面 鼠标右键点击工程目录结构下的img.qrc,会弹出一个菜单,菜单上有添加现有文件的选项,点击,弹出文件对话框,选择我们要添加的资源文件,确认即可。ima.qrc下面就会多出我们添加的资源文件,点击资源文件,左边便会预览资源文件。这个按钮时,会产生一个clicked()的信号,经过的绑定之后, Dialog的reject()槽函数会来响应这个信号,reject()会关闭当前的对话框。本例程在这里简单进行信号与槽的连接,实现点击取消的时候,关闭登录对话框,更多关于信号和槽的介绍,在后面的课程会讲解。 阅读详情

效果图展示
在这里插入图片描述
登录成功界面
在这里插入图片描述

UI设计代码:
1、将代码文件命名为:dingdanlogin.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'dingdanlogin.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(770, 594)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(140, 140, 221, 321))
        self.label.setStyleSheet("border-image: url(:/images/iamges/libai.jpg);\n"
"border-top-left-radius: 30px;\n"
"border-bottom-left-radius: 30px;\n"
"")
        self.label.setText("")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(360, 140, 251, 321))
        self.label_2.setStyleSheet("border-top-right-radius: 30px;\n"
"border-bottom-right-radius: 30px;\n"
"background-color: qlineargradient(spread:pad, x1:0, y1:0.00568182, x2:1, y2:1, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(410, 180, 171, 41))
        self.label_3.setStyleSheet("font: 16pt \"微软雅黑\";\n"
"color: rgb(150, 150, 150);")
        self.label_3.setObjectName("label_3")
        self.lineEdit_name = QtWidgets.QLineEdit(Form)
        self.lineEdit_name.setGeometry(QtCore.QRect(410, 240, 161, 31))
        self.lineEdit_name.setStyleSheet("border-radius:10px;")
        self.lineEdit_name.setText("")
        self.lineEdit_name.setObjectName("lineEdit_name")
        self.bt_denglu = QtWidgets.QPushButton(Form)
        self.bt_denglu.setGeometry(QtCore.QRect(410, 340, 80, 31))
        self.bt_denglu.setStyleSheet("QPushButton{\n"
"background-color: qlineargradient(spread:reflect, x1:0.534, y1:0, x2:0.523, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border-radius:10px;\n"
"color: rgb(0, 170, 0);\n"
"font: 12pt \"微软雅黑\";}\n"
"QPushButton:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"}\n"
"\n"
"QPushButton:pressed{padding-top:7px;\n"
"padding-left:7px;}")
        self.bt_denglu.setObjectName("bt_denglu")
        self.lineEdit_psw = QtWidgets.QLineEdit(Form)
        self.lineEdit_psw.setGeometry(QtCore.QRect(410, 290, 161, 31))
        self.lineEdit_psw.setStyleSheet("border-radius:10px;")
        self.lineEdit_psw.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_psw.setObjectName("lineEdit_psw")
        self.bt_tuichu = QtWidgets.QPushButton(Form)
        self.bt_tuichu.setGeometry(QtCore.QRect(570, 140, 21, 21))
        self.bt_tuichu.setStyleSheet("QPushButton{border:none;\n"
"font: 14pt \"微软雅黑\";\n"
"color: rgb(115, 115, 115);}\n"
"QPushButton:pressed{padding-top:4px;\n"
"padding-left:4px;}\n"
"QPushButton:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"}\n"
"")
        self.bt_tuichu.setObjectName("bt_tuichu")
        self.bt_zuixiaohua = QtWidgets.QPushButton(Form)
        self.bt_zuixiaohua.setGeometry(QtCore.QRect(550, 140, 21, 21))
        self.bt_zuixiaohua.setStyleSheet("QPushButton{border:none;\n"
"font: 14pt \"微软雅黑\";\n"
"color: rgb(115, 115, 115);}\n"
"QPushButton:pressed{padding-top:4px;\n"
"padding-left:4px;}\n"
"QPushButton:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"}\n"
"")
        self.bt_zuixiaohua.setObjectName("bt_zuixiaohua")
        self.bt_zhuce = QtWidgets.QPushButton(Form)
        self.bt_zhuce.setGeometry(QtCore.QRect(500, 340, 80, 31))
        self.bt_zhuce.setStyleSheet("QPushButton{\n"
"background-color: qlineargradient(spread:reflect, x1:0.534, y1:0, x2:0.523, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border-radius:10px;\n"
"color: rgb(0, 170, 0);\n"
"font: 12pt \"微软雅黑\";}\n"
"QPushButton:hover{\n"
"    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(170, 170, 170, 255), stop:1 rgba(255, 255, 255, 255));\n"
"}\n"
"\n"
"QPushButton:pressed{padding-top:7px;\n"
"padding-left:7px;}")
        self.bt_zhuce.setObjectName("bt_zhuce")
        self.stackedWidget = QtWidgets.QStackedWidget(Form)
        self.stackedWidget.setGeometry(QtCore.QRect(400, 380, 138, 30))
        self.stackedWidget.setObjectName("stackedWidget")
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.page_2)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_4 = QtWidgets.QLabel(self.page_2)
        self.label_4.setStyleSheet("color: rgb(255, 0, 0);")
        self.label_4.setObjectName("label_4")
        self.verticalLayout_2.addWidget(self.label_4)
        self.stackedWidget.addWidget(self.page_2)
        self.page_3 = QtWidgets.QWidget()
        self.page_3.setObjectName("page_3")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.page_3)
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_5 = QtWidgets.QLabel(self.page_3)
        self.label_5.setStyleSheet("color: rgb(255, 0, 0);")
        self.label_5.setObjectName("label_5")
        self.verticalLayout.addWidget(self.label_5, 0, QtCore.Qt.AlignHCenter)
        self.stackedWidget.addWidget(self.page_3)
        self.login_version = QtWidgets.QLabel(Form)
        self.login_version.setGeometry(QtCore.QRect(430, 440, 131, 16))
        self.login_version.setStyleSheet("color: rgb(62, 125, 93);")
        self.login_version.setText("")
        self.login_version.setObjectName("login_version")

        self.retranslateUi(Form)
        self.stackedWidget.setCurrentIndex(0)
        self.bt_tuichu.clicked.connect(Form.close) # type: ignore
        self.bt_zuixiaohua.clicked.connect(Form.showMinimized) # type: ignore
        QtCore.QMetaObject.connectSlotsByName(Form)
        Form.setTabOrder(self.lineEdit_name, self.lineEdit_psw)
        Form.setTabOrder(self.lineEdit_psw, self.bt_denglu)
        Form.setTabOrder(self.bt_denglu, self.bt_zhuce)
        Form.setTabOrder(self.bt_zhuce, self.bt_zuixiaohua)
        Form.setTabOrder(self.bt_zuixiaohua, self.bt_tuichu)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_3.setText(_translate("Form", "一朝有悟臻至化境"))
        self.lineEdit_name.setPlaceholderText(_translate("Form", "账号:"))
        self.bt_denglu.setText(_translate("Form", "登录"))
        self.lineEdit_psw.setPlaceholderText(_translate("Form", "密码:"))
        self.bt_tuichu.setText(_translate("Form", "×"))
        self.bt_zuixiaohua.setText(_translate("Form", "-"))
        self.bt_zhuce.setText(_translate("Form", "注册"))
        self.label_4.setText(_translate("Form", "账号或密码不能为空!"))
        self.label_5.setText(_translate("Form", "账号或密码错误!"))
import data_rc

登录界面运行代码。以及数据库连接代码
以下是通过sql server 进行连接 将这部分代码修改为自己数据库即可

     conn = pymssql.connect(host='',
                           port='',
                           user='',
                           password='',
                           database=''
                           ) 
# - * - coding: utf-8 -

from dingdanlogin import *  # 登录窗口
import pymssql
import os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QAbstractItemView
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt, pyqtSlot, QPoint

user_name = ""  # 保存登录名称
department = ""  # 保存登录部门

# 用于初始登录修改密码

# 登录界面
class LoginWindow(QMainWindow):
    def __init__(self):  # 初始化
        super().__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.setWindowIcon(QIcon('icons/logo.ico'))  # logo
        self.setWindowFlags(Qt.FramelessWindowHint)  # 隐藏非边框
        self.setAttribute(Qt.WA_TranslucentBackground)  # 背景透明
        self.ui.bt_denglu.setShortcut('Return')  # 绑定回车键
        self.get_version()                       # 获取版本号
        self.ui.bt_denglu.clicked.connect(self.get_user)  # 登录按钮绑定事件  get_user

    # 获取版本信息
    def get_version(self):
        if os.path.exists('version'):
            os.rename('version', 'version.txt')  # 重命名 version 为 version.txt
            with open('version.txt', 'r') as f:
                a = f.read()
                f.close()
                print('客户端版本:', a)
            print('显示版本信息')
            self.ui.login_version.setText(a)
            os.rename('version.txt', 'version')
        else:
            self.ui.login_version.setText('Version:error')

    # 登录账号密码 数据库验证
    def get_user(self):
        a = 0
        name = self.ui.lineEdit_name.text()
        pwd = self.ui.lineEdit_psw.text()
        name_list = []
        psw_list = []
        department_list = []            # 部门列表存储
        flag_list = []                  # 首次登录修改密码列表

        if name == '' or pwd == '':
            self.ui.stackedWidget.setCurrentIndex(1)
            # QMessageBox.warning(self, '提示', '账号或密码不能为空')
            return
        # 连接数据库 调用db.py文件里面的一个方法,其返回的是一个db值
        try:
            conn = pymssql.connect(host='',
                                   port='',
                                   user='',
                                   password='',
                                   database=''
                                   )
            if conn:
                print('防差错服务器数据库连接成功')
            cursor = conn.cursor()
            select_sql = "select name,password,department,flag from [用户表]"  # 查询语句
            print(select_sql)
            cursor.execute(select_sql)
            self.data = cursor.fetchall()
            cursor.close()
            # conn.close()
            print(self.data)
            # 将账号 和密码  部门 分别存起来。
            for item in self.data:
                # print(item)
                name_list.append(item[0].strip())
                psw_list.append(item[1].strip())
                department_list.append(item[2].strip())
                flag_list.append(item[3])

            print(len(name_list))
            for i in range(len(name_list)):
                if name == name_list[i] and pwd == psw_list[i]:
                    QMessageBox.information(self,'提示','登录成功')

        except Exception as e:
            QMessageBox.information(self, '提示', '请检查是否连接公司本地网络')
            return

        if a == 0:
            pass
        self.ui.stackedWidget.setCurrentIndex(2)

if __name__ == '__main__':
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 自适应大小
    app = QApplication(sys.argv)
    win = LoginWindow()
    win.show()
    sys.exit(app.exec())

界面开发(2)--- 使用PyQt5制作用户登陆界面 上篇文章已经介绍了如何配置PyQt5环境,这篇文章在此基础上展开,主要记录一下如何使用 PyQt5 制作用户登陆界面,并对一些基础操作进行介绍。 阅读详情

相关推荐

PyQt5快速入门教程4-QtDesigner设计登录界面

PyQt5快速入门教程4-QtDesigner设计登录界面 1、实现效果预览 用QtDesigner设计一个登录界面,用QTDesigner设计界面简单多了,而且更加直观。先看下效果图: 那么接下来一步一步完成该功能。 3、绘制ui界面 (1)打开Qt界面设计工具QTDsigner 若未安装,请参考PyQt5快速入门教程1 已经安装好之后,在“Python安装路径\Lib\site-packages\pyqt5_tools\Qt\bin”找到designer.exe。双击打开 (2.

秀才的专栏 6813

(2) 使用Qt Designer设计并实现第一个页面 - 登陆

目录 一、 使用Qt Designer 设计登录界面 1、新建 登录窗口 Main Window 2、创建 用户名和密码标识 3、创建用户名和密码 输入框 4、 创建 登录 和 取消 按钮 二、 将Qt Designer设计的.ui界面编译为.py文件 1、使用pyuic5命令编译 2、编译后的文件目录 三、创建 db.py 连接数据库 1、连接数据库 2、查询数据库 四、创建 main.py 整合界面,数据库,事件等 1、创建login窗口 2、绑定登录按钮到处理函数 ...

记录项目交付的日常 1万+

PyQt5实现登录界面,包含用户注册,记住密码功能

本文主要基于PyQt5,连接MySQL实现登录界面,包含注册功能,记住密码功能

qq_41264992的博客 3万+

Qt第九章:使用qtDesigner设计登录页面

qtdesigner的使用

Good Luck 2377

qt 登陆界面账号和密码的验证

这几天一直研究怎么让界面账号和密码验证的问题 特别想用数据库,一直有QSQLlitdatabase cant find 的问题 找了很多方法没成功 要交课设 所以放弃用其他方法 用文件存吧 比较省事 但是有个更简单的办法 哈哈    先看 转到槽函数 user那是显示的信息  头文件加上QMessageBox  最后那行 获得焦点 倒数第二行清楚输入 结合我之前发的登陆界面到主界

qq_26869059的专栏 1万+

别再手写PyQt代码了!用Qt Designer拖拽式设计GUI,5分钟搞定一个登录界面(附完整源码)

本文介绍了如何使用Qt Designer快速构建Python GUI界面,显著提升开发效率。通过拖拽式设计和可视化配置,5分钟即可完成专业级登录界面开发,大幅减少代码量和调试时间。文章包含完整源码和实战技巧,特别适合PyQt开发者和Python GUI项目。

weixin_33736048的博客 638

PyQT+SQlite实现登录验证界面

PyQT+SQlite3实现登录验证

weixin_63437585的博客 608

C++全栈聊天项目实战:从架构设计到登录界面实现

在现代软件工程中,构建一个高并发、可扩展的即时通讯系统是后端开发的核心挑战之一。其原理通常涉及客户端-服务器模型、网络协议、数据存储与缓存等多个技术层面的协同。从技术价值看,这类系统不仅要求高性能的网络通信处理能力,还需要清晰的服务解耦与数据一致性保障,以支撑海量用户的实时交互。典型的应用场景包括社交软件、在线客服和协同办公工具。本文聚焦于一个使用C++作为核心语言的**全栈聊天项目**,详细阐述了如何通过**Asio**处理高并发网络I/O,并利用**gRPC**实现微服务间的通信,从而构建一个从Qt客户

dianwei5413的博客 511

6.2Qt数据库操作

1. 概述Qt框架中对数据库操作提供了很好的支持,我们可以通过Qt提供的类非常方便地和本地或者远程数据库进行连接。众所周知,数据库是 C-S(client-server)结构的,我们要连接的数据库属于服务器端,通过Qt编写的应用程序属于客户端。如果想用通过Qt访问数据库,首先我们需要在项目中添加数据库模块,模块名为sql。这个sql模块其实对应的就是一个动态库,动态库中有数据库相关类的二进制源码,在使用动态库中的数据库类的时候,动态库被加载到内存,根据程序猿的需求来提供相应的服务。

丰锋的博客 110

【PySide6】实战:从登录验证到主窗口切换的完整流程解析

本文详细解析了使用PySide6从登录验证到主窗口切换的完整流程,包括登录界面设计、信号槽机制、线程安全验证、主窗口单例模式、资源管理及安全认证实现。通过实战案例和代码示例,帮助开发者高效掌握PySide6界面跳转技术,提升应用开发效率。

weixin_30983965的博客 226

基于Qt C++与SQLite的图书管理系统开发实战指南

在课程设计或毕业设计阶段,很多同学会选择开发一个图书管理系统来综合运用所学知识。这类项目看似基础,但在实际编码中,从界面设计到数据库操作,再到业务逻辑的完整串联,每一步都可能遇到意想不到的“坑”。本文将提供一个基于 Qt C++ 的图书管理系统完整实现方案,它不仅仅是一个可运行的代码包,更是一份从零到一的开发指南。无论你是需要完成课设大作业,还是想通过一个实战项目来深入理解 Qt 和 C++ 的桌面应用开发,本文都将手把手带你走完全流程,涵盖环境搭建、数据库设计、核心功能实现、界面美化以及项目打包,确保你能

dengjuanshou7445的博客 408

VS2022与QT6.7开发环境高效配置指南:从安装到实战UI设计

本文详细介绍了如何在VS2022中高效配置QT6.7开发环境,从安装到实战UI设计的完整流程。内容包括环境准备、插件配置、项目创建、界面设计及代码逻辑连接等关键步骤,帮助开发者快速掌握VS2022与QT6.7的协同开发技巧,提升UI设计效率。

z5a6b的博客 607

Qt开发环境搭建与部署实战:从安装到打包的完整指南

跨平台C++图形用户界面框架是构建桌面应用的核心技术之一,其核心原理基于元对象系统和信号槽机制实现组件间通信。这项技术的工程价值在于提供统一的API,显著降低多平台开发的复杂度。在工业控制、嵌入式界面、科学计算可视化等应用场景中,稳定的环境配置和部署能力尤为关键。本文聚焦Qt框架的安装配置、依赖管理和打包部署等实际问题,针对“This application failed to start because no Qt platform plugin could be initialized”等典型错误提供系

weixin_34128839的博客 295

基于 Qt 的智慧社区物业管理系统学习过程

/ 设置按钮样式"}""}"

丰锋的博客 227

Qt开发环境搭建与C++桌面应用入门指南

跨平台应用程序开发框架是现代软件开发中的重要工具,它允许开发者使用同一套代码库构建能在多个操作系统上运行的软件。其核心原理在于抽象底层系统差异,提供统一的API接口,从而实现“一次编写,处处编译”的目标。这类框架的技术价值在于大幅提升开发效率、降低维护成本,并确保不同平台用户体验的一致性。在桌面应用、嵌入式系统界面、工业控制软件等场景中尤为关键。Qt作为成熟的C++跨平台框架,通过其模块化设计和信号与槽机制,为开发者提供了从UI设计到业务逻辑的完整解决方案。本文将以Qt Creator和C++环境配置为例,

weixin_34138056的博客 353

基于PyQt5实现登录界面设计

1.通过登录界面输入账号密码与数据库中存在的账号密码进行比对,并对用户角色(管理员0/普通用户1)进行识别。密码错误时,提示错误信息,密码正确则跳转至用户界面。 2.通过注册界面提交注册信息至数据库,注册的用户角色为普通用户。

CJW的博客 5127

C++与Qt实战:课程设计选题管理系统开发全解析

C++作为经典的面向对象编程语言,其核心价值在于通过类、继承、多态等机制构建复杂、高效的软件系统。Qt框架则在此基础上,提供了强大的跨平台GUI开发能力,其信号与槽机制是实现界面与业务逻辑解耦的关键。结合两者,开发者能够高效构建兼具稳定性和良好用户体验的桌面应用程序,广泛应用于教育管理、小型办公系统等场景。本文聚焦于一个具体的课程设计选题管理系统,深入剖析其从需求分析、数据模型设计到界面布局与事件处理的完整实现路径,并针对开发中常见的`中文乱码`和`窗口缩放`等实际问题,提供经过验证的解决方案与工程实践指南

weixin_30784501的博客 409

2 使用Qt Designer设计并实现第一个页面 - 登陆.zip

2 使用Qt Designer设计并实现第一个页面 - 登陆.zip

上一篇: python exe文件反编译步骤
下一篇: K3wise获取产品序列号失败,k3wise补丁安装绕过验证
龙崎大佬
博客等级 码龄6年 253粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙崎大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值