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.rhkb.cn/news/316366.html

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

相关文章

使用STM32CubeMX对STM32F4进行串口配置

目录 1. 配置1.1 Pin脚1.2 RCC开启外部晶振1.3 时钟1.4 串口配置 2. 代码2.1 默认生成代码2.1 开启串口中断函数2.3 接收中断2.4 接收回调函数2.5 增加Printf 的使用 1. 配置 1.1 Pin脚 1.2 RCC开启外部晶振 1.3 时钟 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高…

Android CalendarView助你打造精美的Android日历应用

Android CalendarView助你打造精美的Android日历应用 1. 引言 移动应用中的日历功能对于用户来说至关重要,它不仅是时间管理的工具,还能帮助用户记录重要事件和安排活动。因此,一个高效、易用的日历控件对于移动应用的成功至关重要。 传统…

计算机视觉 | 交通信号灯状态的检测和识别

Hi,大家好,我是半亩花海。本项目旨在使用计算机视觉技术检测交通信号灯的状态,主要针对红色和绿色信号灯的识别。通过分析输入图像中的像素颜色信息,利用OpenCV库实现对信号灯状态的检测和识别。 目录 一、项目背景 二、项目功能…

大数据学习笔记14-Hive基础2

一、数据字段类型 数据类型 :LanguageManual Types - Apache Hive - Apache Software Foundation 基本数据类型 数值相关类型 整数 tinyint smallint int bigint 小数 float double decimal 精度最高 日期类型 date 日期 timestamps 日期时间 字符串类型 s…

[Algorithm][链表][两数相加][两两交换链表中的节点][重排链表][合并K个升序链表][K个一组翻转链表] + 链表原理 详细讲解

目录 0.常用技巧1.两数相加1.题目链接2.算法原理详解3.代码实现 2.两两交换链表中的节点1.题目链接2.算法原理详解3.代码实现 3.重排链表1.题目链接2.算法原理详解3.代码实现 4.合并 K 个升序链表1.题目链接2.算法原理详解3.代码实现 5.K 个一组翻转链表1.题目链接2.算法原理详…

蓝网科技临床浏览系统 deleteStudy SQL注入漏洞复现(CVE-2024-4257)

0x01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 0x02 漏洞概述 蓝网科技临床浏览系统 deleteStudy接口处SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取…

喀秋莎Camtasia2023中文破解Crack下载附安装教程 2023免费补丁百度云 电脑版注册机提取

Camtasia2023破解版是一款备受好评的电脑录屏软件,主要用于教授课程,培训他人,以及进行沟通和屏幕分享。内置视频编辑器支持拖放文本,提供了强大的屏幕录像、视频的剪辑和编辑、视频菜单制作、视频剧场和视频播放功能等&#xff0…

如何编写测试用例

总结 测试用例需求来源 文档 用户角度 编写测试用例步骤 分析需求 写测试点 对需求的拆分 辅助完成测试用例的编写 编写测试用例 编写测试用例原则 能看懂 能执行 测试结果状…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读:在产品创新过程中,市场调研的重要性不言而喻。它不仅是产品创新的起点,也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述:市场调研重要性 1、相关概…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中,Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂,myCobot 600以其600mm的工作半径和2kg的末端负载能力,满足了多样化的操作需求。…

人工 VS AGV无人搬运机器人,AGV赋能中国智能制造

agv 机器人作为智能制造的重要抓手,正在渗透到各个传统行业,成为我国制造业转型升级的焦点。未来,智能AGV将不仅仅是简单的把货物搬运到指定的位置,而是要把5G技术、大数据、物联网、云计算等贯穿于产品的设计中,让智能…

【CGALDotNet】二维矢量多边形可视域计算(C#调用CGAL)

参考 CGALDotNet快速开始:https://blog.csdn.net/liqian_ken/article/details/138274933 CGAL二维可视域计算介绍:https://doc.cgal.org/latest/Visibility_2/index.html#visibility_2_introduction CGAL相关接口:https://doc.cgal.org/late…

c#数据库: 6.查询成绩合格的学生/7.输出全部学生信息

SQL Server Management Studio Management Studio 中的学生信息表: 查询上图成绩合格的学生信息,并将信息从控制台输出 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text…

【设计模式】简单工厂模式(Simple Factory Pattern)

工厂模式(Factory Pattern) 用于创建不同类型的奖品对象。您可以创建一个奖品工厂,根据配置的类型来实例化相应的奖品对象。 public interface Prize {void award(); }public class MoneyPrize implements Prize {Overridepublic void awar…

基于Sping Boot集成的websocket实现聊天室

Spring Boot整合WebSocket实现聊天室 Spring Boot 提供了 Websocket 组件 spring-boot-starter-websocket,用来支持在 Spring Boot环境下对Websocket 的使用。 下面我们就以多人在线聊天室为例,演示 Spring Boot 是如何整合Websocket 实现服务端消息推…

U盘格式转换GPT格式转回DOS

当前格式 fdisk /dev/sdb# 在 fdisk 提示符下,输入以下命令删除分区: d # 选择要删除的分区编号(如 1、2 等) w开始转换 [rootnode-24 ~]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.37.4). Changes will remain in memory o…

使用opencv改变图片大小

使用opencv改变图片大小 图片的宽度和高度效果代码 图片的宽度和高度 宽度:图片的宽度指的是图像从左边缘到右边缘的水平跨度。在数字图像中,宽度通常是以像素(pixels)为单位来度量的。高度:图片的高度指的是图像从上…

推荐一个wordpress免费模板下载

首页大背景图,首屏2张轮播图,轮换展示,效果非常的炫酷,非常的哇噻,使用这个主题搭建的wordpress网站,超过了200个,虽然是一个老主题了,不过是经得起时间考验的,现在用起来…

CUDA架构介绍与设计模式解析

文章目录 **CUDA**架构介绍与设计模式解析**1** CUDA 介绍CUDA发展历程CUDA主要特性CUDA系统架构CUDA应用场景编程语言支持CUDA计算过程线程层次存储层次 **2** CUDA 系统架构分层架构并行计算模式生产-消费者模式工作池模式异步编程模式 **3** CUDA 中的设计模式工厂模式策略模…

MySQL常见问题解决和自动化安装脚本

常见问题 MySQL密码正确但无法登录的情况 这种情况一般都是因为缓存,使用mysql -u root -p123456直到成功登陆为止,并且进入之后重新修改密码,多次重复修改密码的命令并且再一次清除缓存后退出。 ALTER USER rootlocalhost IDENTIFIED WIT…