pyQt5 和 Qt Designer 实现登录注册案例

news2024/11/24 20:42:43

Qt Designer 设计页面:

通过 PyQt5 手写

1. 先引入用到的库 

from PyQt5.QtWidgets import *
import sys

2. 创建应用,窗口, 设置窗口

# 创建应用
app = QApplication(sys.argv)
# 创建窗口
w = QWidget()

# 设置窗口标题
w.setWindowTitle("注册登录")


# 展示
w.show()
# 等待退出
sys.exit(app.exec())

2. 设置性别和爱好的横向布局

# 横向布局
hSexLayout = QHBoxLayout()
hHobbyLayout = QHBoxLayout()

4. 表单布局

# 表单
form = QFormLayout()
# 用户名
username = QLineEdit()
# 密码
password = QLineEdit()
# 将密码设置为密码属性
password.setEchoMode(password.Password)

# 性别
radioSex1 = QRadioButton("男")
radioSex2 = QRadioButton("女")
# 默认选中男
radioSex1.setChecked(True)
# 单选框添加到横向layout
hSexLayout.addWidget(radioSex1)
hSexLayout.addWidget(radioSex2)

# 爱好 复选框
hobby1 = QCheckBox("抽烟")
hobby2 = QCheckBox("喝酒")
hobby3 = QCheckBox("烫头")
# 复选框添加到横向layout
hHobbyLayout.addWidget(hobby1)
hHobbyLayout.addWidget(hobby2)
hHobbyLayout.addWidget(hobby3)

# 签名
signature = QLineEdit()

# 择偶要求: 多行输入框
choose = QTextEdit()

# 注册按钮
btn = QPushButton("确认注册")
btn.setFixedSize(120, 40)

5. 向表单中添加每一行

# 表单
form.addRow("用户名", username)
form.addRow("密码", password)
form.addRow("签名", signature)
form.addRow("性别", hSexLayout)
form.addRow("爱好", hHobbyLayout)
form.addRow("择偶要求", choose)
form.addRow("", btn)

6. 定义打印信息的方法

def printall():
    print("用户名:", username.text())
    print("密码:", password.text())
    if radioSex1.isChecked():
        print("性别: 男")
    if radioSex2.isChecked():
        print("性别: ", radioSex2.text())

    hobby = []
    if hobby1.isChecked():
        hobby.append(hobby1.text())
        # print("爱好:抽烟")
    if hobby2.isChecked():
        hobby.append(hobby2.text())
        # print("爱好:喝酒")
    if hobby3.isChecked():
        hobby.append(hobby3.text())
        # print("爱好:烫头")
    print(hobby)
    print("个性签名:", signature.text())
    print("择偶要求:", choose.toPlainText())

7. 布局添加容器,点击确认注册调用方法



btn.clicked.connect(printall)

# 布局添加到容器
w.setLayout(form)

完整代码

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)
w = QWidget()

# 设置窗口标题
w.setWindowTitle("注册登录")

# 横向布局
hSexLayout = QHBoxLayout()
hHobbyLayout = QHBoxLayout()

# 表单
form = QFormLayout()
# 用户名
username = QLineEdit()
# 密码
password = QLineEdit()
# 将密码设置为密码属性
password.setEchoMode(password.Password)

# 性别
radioSex1 = QRadioButton("男")
radioSex2 = QRadioButton("女")
# 默认选中男
radioSex1.setChecked(True)
# 单选框添加到横向layout
hSexLayout.addWidget(radioSex1)
hSexLayout.addWidget(radioSex2)

# 爱好 复选框
hobby1 = QCheckBox("抽烟")
hobby2 = QCheckBox("喝酒")
hobby3 = QCheckBox("烫头")
# 复选框添加到横向layout
hHobbyLayout.addWidget(hobby1)
hHobbyLayout.addWidget(hobby2)
hHobbyLayout.addWidget(hobby3)

# 签名
signature = QLineEdit()

# 择偶要求: 多行输入框
choose = QTextEdit()

# 注册按钮
btn = QPushButton("确认注册")
btn.setFixedSize(120, 40)

# 表单
form.addRow("用户名", username)
form.addRow("密码", password)
form.addRow("签名", signature)
form.addRow("性别", hSexLayout)
form.addRow("爱好", hHobbyLayout)
form.addRow("择偶要求", choose)
form.addRow("", btn)


def printall():
    print("用户名:", username.text())
    print("密码:", password.text())
    if radioSex1.isChecked():
        print("性别: 男")
    if radioSex2.isChecked():
        print("性别: ", radioSex2.text())

    hobby = []
    if hobby1.isChecked():
        hobby.append(hobby1.text())
        # print("爱好:抽烟")
    if hobby2.isChecked():
        hobby.append(hobby2.text())
        # print("爱好:喝酒")
    if hobby3.isChecked():
        hobby.append(hobby3.text())
        # print("爱好:烫头")
    print(hobby)
    print("个性签名:", signature.text())
    print("择偶要求:", choose.toPlainText())


btn.clicked.connect(printall)

# 布局添加到容器
w.setLayout(form)

w.show()
sys.exit(app.exec())

 通过Qt Designer设计表单

在UI文件中保存登陆注册的UI, 右键通过外部工具PyUIC生成.py文件

生成登陆注册.py中的内容


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(354, 375)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(40, 10, 301, 331))
        self.widget.setObjectName("widget")
        self.formLayout_3 = QtWidgets.QFormLayout(self.widget)
        self.formLayout_3.setContentsMargins(0, 0, 0, 0)
        self.formLayout_3.setObjectName("formLayout_3")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setObjectName("label")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
        self.username = QtWidgets.QLineEdit(self.widget)
        self.username.setInputMask("")
        self.username.setText("")
        self.username.setObjectName("username")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.username)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.password = QtWidgets.QLineEdit(self.widget)
        self.password.setInputMask("")
        self.password.setText("")
        self.password.setEchoMode(QtWidgets.QLineEdit.Password)
        self.password.setObjectName("password")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.password)
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3)
        self.splitter = QtWidgets.QSplitter(self.widget)
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.widget1 = QtWidgets.QWidget(self.splitter)
        self.widget1.setObjectName("widget1")
        self.sexLayout = QtWidgets.QHBoxLayout(self.widget1)
        self.sexLayout.setContentsMargins(0, 0, 0, 0)
        self.sexLayout.setObjectName("sexLayout")
        self.radio1 = QtWidgets.QRadioButton(self.widget1)
        self.radio1.setEnabled(True)
        self.radio1.setChecked(True)
        self.radio1.setObjectName("radio1")
        self.sexLayout.addWidget(self.radio1)
        self.radio2 = QtWidgets.QRadioButton(self.widget1)
        self.radio2.setObjectName("radio2")
        self.sexLayout.addWidget(self.radio2)
        self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.splitter)
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setObjectName("label_4")
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_4)
        self.splitter_2 = QtWidgets.QSplitter(self.widget)
        self.splitter_2.setOrientation(QtCore.Qt.Horizontal)
        self.splitter_2.setObjectName("splitter_2")
        self.widget2 = QtWidgets.QWidget(self.splitter_2)
        self.widget2.setObjectName("widget2")
        self.hobbyLayout = QtWidgets.QHBoxLayout(self.widget2)
        self.hobbyLayout.setContentsMargins(0, 0, 0, 0)
        self.hobbyLayout.setObjectName("hobbyLayout")
        self.checkBox_1 = QtWidgets.QCheckBox(self.widget2)
        self.checkBox_1.setObjectName("checkBox_1")
        self.hobbyLayout.addWidget(self.checkBox_1)
        self.checkBox_2 = QtWidgets.QCheckBox(self.widget2)
        self.checkBox_2.setObjectName("checkBox_2")
        self.hobbyLayout.addWidget(self.checkBox_2)
        self.checkBox_3 = QtWidgets.QCheckBox(self.widget2)
        self.checkBox_3.setObjectName("checkBox_3")
        self.hobbyLayout.addWidget(self.checkBox_3)
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.splitter_2)
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setObjectName("label_5")
        self.formLayout_3.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_5)
        self.splitter_3 = QtWidgets.QSplitter(self.widget)
        self.splitter_3.setOrientation(QtCore.Qt.Horizontal)
        self.splitter_3.setObjectName("splitter_3")
        self.signature = QtWidgets.QLineEdit(self.splitter_3)
        self.signature.setInputMask("")
        self.signature.setText("")
        self.signature.setObjectName("signature")
        self.formLayout_3.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.splitter_3)
        self.splitter_5 = QtWidgets.QSplitter(self.widget)
        self.splitter_5.setOrientation(QtCore.Qt.Horizontal)
        self.splitter_5.setObjectName("splitter_5")
        self.choose = QtWidgets.QLabel(self.splitter_5)
        self.choose.setObjectName("choose")
        self.splitter_4 = QtWidgets.QSplitter(self.splitter_5)
        self.splitter_4.setOrientation(QtCore.Qt.Horizontal)
        self.splitter_4.setObjectName("splitter_4")
        self.textEdit = QtWidgets.QTextEdit(self.splitter_4)
        self.textEdit.setObjectName("textEdit")
        self.formLayout_3.setWidget(5, QtWidgets.QFormLayout.SpanningRole, self.splitter_5)
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.formLayout_3.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "用户名"))
        self.label_2.setText(_translate("Form", "密  码"))
        self.label_3.setText(_translate("Form", "性  别"))
        self.radio1.setText(_translate("Form", "男"))
        self.radio2.setText(_translate("Form", "女"))
        self.label_4.setText(_translate("Form", "爱  好"))
        self.checkBox_1.setText(_translate("Form", "喝酒"))
        self.checkBox_2.setText(_translate("Form", "烫头"))
        self.checkBox_3.setText(_translate("Form", "抽烟"))
        self.label_5.setText(_translate("Form", "个性签名"))
        self.choose.setText(_translate("Form", "择偶要求"))
        self.pushButton.setText(_translate("Form", "确认注册"))

使用PyQt面向对象开发

注意: 需要引入UI文件中的.py文件中的所有 *

from UI.login_register import *

from PyQt5.QtWidgets import *
import sys
from UI.login_register import *


class login_register(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        # 1. 实例化Ui_Form()
        self.form = Ui_Form()
        # 2. 调用setupUi方法
        self.form.setupUi(self)
        # 调用init_ui方法
        self.init_ui()

    def init_ui(self):
        self.form.pushButton.clicked.connect(self.click)

    def click(self):
        print("姓名:", self.form.username.text())
        print("密码:", self.form.password.text())
        if self.form.radio1.isChecked():
            print("性别:", self.form.radio1.text())
        if self.form.radio2.isChecked():
            print("性别:", self.form.radio2.text())

        if self.form.checkBox_1.isChecked():
            print("爱好1:", self.form.checkBox_1.text())
        if self.form.checkBox_2.isChecked():
            print("爱好2:", self.form.checkBox_2.text())
        if self.form.checkBox_3.isChecked():
            print("爱好3:", self.form.checkBox_3.text())

        print("个性签名:", self.form.signature.text())
        print("择偶要求", self.form.textEdit.toPlainText())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = login_register()

    w.show()
    sys.exit(app.exec())

直接运行后看到的结果, 在文章的最上面

这个案例中需要注意:

1. # 将密码设置为密码属性
password.setEchoMode(password.Password)

2. 性别为单选, 爱好为多选, 择偶要求为多行文本

最后效果


打印结果

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

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

相关文章

ssm091校园自助洗衣系统的分析与设计+jsp

校园自助洗衣系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对校园洗衣信息管理混乱,出…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API,用于监测一个或多个目标元素与其祖先元素或视窗(viewport)之间的交叉状态(intersection)的变化。它可以有效地监听元素是否进入或离开可视区域,从而实现…

Dokcer容器分布式搭建LNMP+wordpress论坛

目录 引言 一、架构环境 二、搭建容器 (一)自定义网络 (二)搭建nginx容器 1.文件准备 2.查看与编辑文件 3.生成镜像 4.创建容器 (三)搭建MySQL容器 1.文件准备 2.查看与编辑文件 3.生成镜像 …

2013NOIP普及组真题 4. 车站分级

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1964 核心思想: 1、原文中提到 “如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠”,如果设停靠站为A&…

汽车信息安全入门总结(2)

目录 1.引入 2.汽车信息安全技术 3.密码学基础知识 4.小结 1.引入 上篇汽车信息安全入门总结(1)-CSDN博客主要讲述了汽车信息安全应该关注的点,以及相关法规和标准,限于篇幅,继续聊信息安全相关技术以及需要掌握的密码学基础知识。 2.汽…

SpringCloud学习笔记(一)微服务介绍、服务拆分和RestTemplate远程调用、Eureka注册中心

文章目录 1 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务1.4 SpringCloud1.5 总结 2 服务拆分与远程调用2.1 服务拆分原则2.2 服务拆分示例2.2.1 搭建项目2.2.2 创建数据库和表2.2.3 实现远程调用2.2.3.1 需求描述2.2.3.2 注册RestTemplate2.2.3.3 实现远程调用 2.2.4 提供…

Aiseesoft Data Recovery for Mac:专业数据恢复软件

Aiseesoft Data Recovery for Mac是一款高效且专业的数据恢复软件,专为Mac用户量身打造。 Aiseesoft Data Recovery for Mac v1.8.22激活版下载 无论是由于误删、格式化还是系统崩溃等原因导致的数据丢失,Aiseesoft都能帮助您快速找回。 它采用先进的扫描…

【计算机毕业设计】基于SSM++jsp的社区管理与服务系统【源码+lw+部署文档+讲解】

目录 摘 要 Abstract 第一章 绪论 第二章 系统关键技术 第三章 系统分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3运行可行性 3.1.4法律可行性 3.4.1注册流程 3.4.2登录流程 3.4.3活动报名流程 第四章 系统设计 4.3.1登录模块顺序图 4.3.2添加信息模块顺序图 4.4.1 数据库E-…

SpringCloud系列(21)--更换Ribbon的负载均衡模式

前言:在上一篇文章中我们介绍了关于Ribbon的知识点已经如果去应用Ribbon,而本章节内容则是关于如何去切换Ribbon的负载均衡模式。 以下是上篇文章的部分内容,可以再看下熟悉下,方便后续理解 Ribbon工作架构图 Ribbon的负载均衡模式…

C# winform 漂亮的日期时间控件

源代码下载: https://download.csdn.net/download/gaoxiang19820514/89242240 效果图 在 HZH-Controls控件 基础上修改的日期控件 因为HZH_Controls控件 中的日期控件太大了, 我的程序中需要多个日期时间的控件放不下,主题是绿色的&#…

pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx 文件读取漏洞复现

0x01 产品简介 pkpmbs 建设工程质量监督系统是湖南建研信息技术股份有限公司一个与工程质量检测管理系统相结合的,B/S架构的检测信息监管系统。 0x02 漏洞概述 pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx接口处存在文件读取漏洞,未经身份认证的攻击者可以利用漏洞读…

使用 Docker 自建一款怀旧游戏之 - 扫雷

1)扫雷 简介 扫雷 是一种经典的单人电脑游戏,最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块,而不触发地雷。每个方块上都标有数字,表示周围 8 个方块中…

26版SPSS操作教程(高级教程第十七章)

目录 前言 粉丝及官方意见说明 第十七章一些学习笔记 第十七章一些操作方法 聚类分析 均值聚类法(快速聚类法) 假设数据 预分析(描述统计) 先将除了ID变量的每个变量除以其最大值进行标准化操作 具体操作 结果解释 聚…

OpenCV如何在图像中寻找轮廓

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何模板匹配 下一篇 :OpenCV系列文章目录(持续更新中......) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 cv::findContour…

【Web】D^3CTF之浅聊d3pythonhttp——TE-CL请求走私

目录 step0 题目信息 step1 jwt空密钥伪造 step1.5 有关TE&CL的lab step2 TE-CL请求走私 payload1 payload2 step0 题目信息 注意到题目源码前端是flask写的,后端是web.py写的 frontend from flask import Flask, request, redirect, render_templat…

KMP算法与next数组【超详细】

一、朴素匹配法 S "abgabcd" T "abcd" 假设有两个字符串,要判断字符串T是否在字符串S中出现过&#xff0c;你会怎么做&#xff1f;一般来说我们都是这样&#xff0c;一个一个对比&#xff1a; #include<iostream> using namespace std; int mai…

机器学习:逻辑回归

概念 首先&#xff0c;逻辑回归属于分类算法&#xff0c;是线性分类器。我们可以认为逻辑回归是在多元线性回归的基础上把结果给映射到0-1的区间内&#xff0c;hθ&#xff08;x&#xff09;越接近1越有可能是正例&#xff0c;反之&#xff0c;越接近0越有可能是负例。那么&am…

C++中list的使用

文章目录 一、 list简介二、 构造函数1. 默认构造函数2. 拷贝构造3. 迭代器区间初始化4. 插入n个值为x的数据5. 代码示例 三、 容量和元素访问1. empty()2. size()3. max_size()3. back()4. front()5. 代码示例 四、 增删查改1. push_back()2. push_front()3. emplace_back()4.…

stm32f103zet6_串口实现-DHT11-tim1(定时)

1思路 1打开时钟 1.1使用定时器实现us级的计时 1.2在打开串口 1,3在DHT11驱动中修改引脚 stm32cudeMX 配置 1打开时钟 2打开串口 3打开tim1(定时器) 4生成代码 代码设置 1导入DHT11库(tim.h是定时器的文件系统自动生成的) DHT11.c #include "dht11.h" #inc…

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier来诊断并预测一个人是否患有自闭症

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…