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

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 sysapp = 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, QtWidgetsclass 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.translateForm.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.mzph.cn/diannao/5060.shtml

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

相关文章

HaLo-NeRF:利用视觉和语言模型对场景的精准定位和细粒度语义理解

包含大量摄影师拍摄的照片的互联网图像集有望实现对大型旅游地标的数字探索。然而,先前的工作主要集中在几何重建和可视化上,忽略了语言在为导航和细粒度理解提供语义界面方面的关键作用。 项目:HaLo-NeRF: Learning Geometry-Guided Semant…

LeetCode - 129双周赛

目录 一,3127. 构造相同颜色的正方形 二,3128. 直角三角形 三,3129. 找出所有稳定的二进制数组 I ​编辑 四,3130. 找出所有稳定的二进制数组 II 一,3127. 构造相同颜色的正方形 本题就是问在一个3x3的正方形中是…

2024.4.25 LoadRunner 测试工具详解 —— Controller Analysis

目录 Controller 的使用 创建场景 Controller 快捷方式创建场景 VUG 针对写好脚本创建场景 场景设计 设计初始化 设计启动机制 设计性能测试脚本的执行时间 设计虚拟用户退出机制 场景运行 添加监控指标至图标格区域 Analysis 的使用 汇总报告 测试报表 吞吐量图 …

仿9377登录注册页面源码分享

LOGO在image里面修改,名字这些有记事本打开修改 仿9377登录注册页面源码分享

《HelloGitHub》第 97 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

【Spark】读取本地文件

最近有一个需求,spark任务读取本地csv文件,拼接成rk之后再去hbase取值进行后续处理。搞了好久都没能解决,记录一下解决思路如下: 1、写入临时文件 spark可以读取本地文件,但打成jar包之后不会自动读取jar包中的文件&…

《Python语言科研绘图与学术图表绘制从入门到精通》解锁Python语言绘图魅力,让数据可视化成为你的科研利器!

本书特点 1.零基础高效入门:通过软件操作、实战案例及图文、代码结合的方式,实现从入门到精通的快速学习。 2.掌握多元科研绘图:涵盖科研绘图基础、各类图形绘制技巧,包括变量、极坐标、2D、3D及地理信息可视化等。 3.实用与艺术…

学习 Rust 第 22 天:mini_grep 第 2 部分

书接上文,在本文中,我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试,我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念,例如错误处理、环境…

Coursera: An Introduction to American Law 学习笔记 Week 06: Civil Procedure (完结)

An Introduction to American Law Course Certificate Course Introduction 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 06: Civil Pro…

安卓手机APP开发__媒体开发部分__高动态范围的视频播放

安卓手机APP开发__媒体开发部分__高动态范围的视频播放 目录 高动态范围的概述 设备的前提条件 检查高动态范围的播放的支持 在你的APP中设置高动态范围的播放 使用SurfaceView来设置MediaCodec 高动态范围的概述 高动态范围提供了一个宽的范围的颜色和最亮的白色与最暗…

Python使用设计模式中的建筑模式将数据写入Excel且满足条件内容标红

对于这个任务,适合使用"Builder"设计模式。Builder模式的主要目的是将对象的构建与其表示分离,以便相同的构建过程可以创建不同的表示。在这个情况下,我们需要一个构建器来逐行构建Excel表格,并根据给定的数据添加相应的…

【HTML】

1.html 语义化 提高可读性:对于开发者来说,语义化的HTML代码更容易阅读和理解。因为每个标签都有其特定的含义和用途,所以看到标签就能大致了解该部分内容的结构和作用。有利于搜索引擎优化(SEO):对于搜索…

GoF之工厂模式

GoF之工厂模式 文章目录 GoF之工厂模式每博一文案1. 简单说明“23种设计模式”1.2 介绍工厂模式的三种形态1.3 简单工厂模式(静态工厂模式)1.3.1 简单工厂模式的优缺点: 1.4 工厂方法模式1.4.1 工厂方法模式的优缺点: 1.5 抽象工厂模式1.6 抽象工厂模式的…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

C++初阶学习第四弹——类与对象(中)——刨析类与对象的核心点

类与对象(上):C初阶学习第三弹——类与对象(上)——初始类与对象-CSDN博客 前言: 在前面文章中,我们已经讲了类与对象的思想和类与对象的一些基本操作,接下来这篇文章我们将讲解以下…

探索Jellyfin:支持Android的自由开源的媒体服务器平台

探索Jellyfin:支持Android的自由开源的媒体服务器平台 I. 简介 A. 什么是Jellyfin? Jellyfin是一个自由开源的媒体服务器平台,旨在让用户能够自主管理和流式传输他们的媒体内容。与许多闭源的商业媒体服务器解决方案不同,Jelly…

Matlab各个版本介绍、区别分析及推荐

MATLAB,由美国MathWorks公司出品,是一款广泛应用的商业数学软件。自其诞生之初,MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域,赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后,往下滑 咱们在下载neo4j时,官方可能要咱们填写一下个人信息,比如:姓名组织结构邮箱等: 咱们可以观察一下,ne4j的下载链…

uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之编写语音播放安卓插件

前言 如果你不会编写安卓插件,你可以先看看我之前零基础的文章(uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之零基础编写安卓插件), 我们使用android.speech.tts.TextToSpeech进行编写语言播放插件 开始 uniapp <template><view style=&q…

烟雾识别图像处理方法详解---豌豆云

本文详细介绍了烟雾识别图像处理方法的原理、流程和应用场景&#xff0c;帮助读者理解并掌握这一技术&#xff0c;为实际应用提供指导。 随着科技的不断发展&#xff0c;图像处理技术在各个领域得到了广泛应用。 其中&#xff0c;烟雾识别图像处理方法作为一种重要的技术手段…