(6)pyqt5--->窗口跳转(注册登录功能)

GitHub连接:
本专栏所有源代码的GitHub直通车

本专栏所有源代码的Gitte地址

上一篇已经讲了连接信号和槽的另外一种方法

这篇博客本来在2020年年末就应该发出来了,一直拖到现在! 在复习的空闲,能够去写一下舒心的东西真的享受

这次主要的内容就是界面跳转实现登录功能

我用的办法比较的笨拙,但是能用。其实只要完成一个事情就完全OK了:当你的登录按钮的click时间被处触发的时候,你连接的槽函数应该是你自己的登录API,当然我这次用的是我自己服务器的登录接口函数,你们使用的时候换成自己的登录API就可以,话说回来,如果你验证成功了,你需要向两个界面分别传递信息,做出关闭本窗口和打开新窗口的动作,我习惯于将槽函数写在我自己的类里面,这样子就没法给另外一个窗口对象传递信息(暂时没想到好方法),所以我直接将这个槽函数直接写在主线程中,然后按钮绑定事件也在槽函数之后绑定。

以前在写tkinter的时候就是这么干的,暂时没有出什么问题,可以说是简单粗暴

本次的代码文件主要是有

  • login_ui.py
  • main_ui.py
  • main.py

前两个是ui转过来的py文件,main.py文件是程序运行的文件

如果不想去GitHub上面下载代码的话,我就直接贴出来了

login_ui.py

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

# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# 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_login(object):
    def setupUi(self, login):
        login.setObjectName("login")
        #login.setStyleSheet("#login{background-color:green}")
        login.resize(412, 269)
        self.id_label = QtWidgets.QLabel(login)
        self.id_label.setGeometry(QtCore.QRect(110, 60, 51, 41))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(14)
        self.id_label.setFont(font)
        self.id_label.setObjectName("id_label")
        self.pw_label_2 = QtWidgets.QLabel(login)
        self.pw_label_2.setGeometry(QtCore.QRect(110, 120, 51, 41))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(14)
        self.pw_label_2.setFont(font)
        self.pw_label_2.setObjectName("pw_label_2")
        self.login_pushButton = QtWidgets.QPushButton(login)
        self.login_pushButton.setGeometry(QtCore.QRect(100, 200, 75, 23))
        self.login_pushButton.setObjectName("login_pushButton")
        self.exit_pushButton = QtWidgets.QPushButton(login)
        self.exit_pushButton.setGeometry(QtCore.QRect(240, 200, 75, 23))
        self.exit_pushButton.setObjectName("exit_pushButton")
        self.lineEdit_id = QtWidgets.QLineEdit(login)
        self.lineEdit_id.setGeometry(QtCore.QRect(170, 70, 113, 20))
        self.lineEdit_id.setObjectName("lineEdit_id")
        self.lineEdit_pw = QtWidgets.QLineEdit(login)
        self.lineEdit_pw.setGeometry(QtCore.QRect(170, 130, 113, 20))
        self.lineEdit_pw.setObjectName("lineEdit_pw")
        self.lineEdit_pw.setEchoMode(QtWidgets.QLineEdit.Password)
        self.retranslateUi(login)
        self.exit_pushButton.clicked.connect(login.close)
        QtCore.QMetaObject.connectSlotsByName(login)

    def retranslateUi(self, login):
        _translate = QtCore.QCoreApplication.translate
        login.setWindowTitle(_translate("login", "Form"))
        self.id_label.setText(_translate("login", "账号"))
        self.pw_label_2.setText(_translate("login", "密码"))
        self.login_pushButton.setText(_translate("login", "登录"))
        self.exit_pushButton.setText(_translate("login", "退出"))

main_ui.py文件

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

# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# 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_main(object):
    def setupUi(self, main):
        main.setObjectName("main")
        main.resize(1007, 631)

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

    def retranslateUi(self, main):
        _translate = QtCore.QCoreApplication.translate
        main.setWindowTitle(_translate("main", "Form"))

main.py文件

"""
/********************************************************************************
* @Filename: main.py
* @Author: haomingHu
* @Version: 1.0
* @Date:  2021-03-26
* @Description: 
* @History: 
********************************************************************************/
"""



from login_ui import Ui_login
from main_ui  import Ui_main
import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QPalette,QBrush,QPixmap
from PyQt5.QtCore import Qt

class myLogin(QtWidgets.QWidget,Ui_login):
    login_state = 0 
    def __init__(self):
        super(myLogin,self).__init__()
        self.setupUi(self)
        loginPalette = QPalette()
        loginPalette.setBrush(QPalette.Background, QBrush(QPixmap("./loginbackground.jpg")))
        #loginPalette.setColor(QPalette.Background, Qt.blue)
        self.setPalette(loginPalette)

class myMainGui(QtWidgets.QWidget,Ui_main):
    userID = ""
    #构造函数
    def __init__(self):
        super(myMainGui,self).__init__()
        self.setupUi(self)

    def closeEvent(self,event):#函数名固定不可变
        reply=QtWidgets.QMessageBox.question(self,u'Notice!',u'Are you  sure to exit?'
            ,QtWidgets.QMessageBox.Yes,QtWidgets.QMessageBox.No)
        #QtWidgets.QMessageBox.question(self,u'弹窗名',u'弹窗内容',选项1,选项2)
        if reply==QtWidgets.QMessageBox.Yes:
            event.accept()#关闭窗口
        else:
            event.ignore()#忽视点击X事件



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myLogin = myLogin()
    myLogin.show()
    mainGUI = myMainGui()
    
    userIDSure = ""
    flag = 0
    def login_check():
        userID = myLogin.lineEdit_id.text()
        user_PW = myLogin.lineEdit_pw.text()
        print(userID)
        print(user_PW)
        '''
        这里我使用的是我服务器的登录请求接口
        使用的时候换成自己封装好的登录验证接口即可
        '''
        
        '''
        正常来说,登录成功的话,需要将登陆成功的用户信息回传给主界面
        也就是告诉主界面,是哪个用户登录了,这个时候可以在主界面的类中定义
        一些类属性,如果登录成功,则将lineedit对象的输入内容赋值给类属性即可
        '''
        #login_flag = event.loginRequest(userID,user_PW)
        #if login_flag == 0:
        if userID == "1" and user_PW == "1":
            myLogin.login_state = 1
            mainGUI.userID = myLogin.lineEdit_id.text()
            myLogin.close()
            mainGUI.show()
            
    myLogin.login_pushButton.clicked.connect(login_check)

    sys.exit(app.exec_())

在这里插入图片描述

补充知识点:

  • 获取lineedit的输入内容方法:

使用lineedit的text方法直接获取,获取的对象是一个字符串的对象。

        userID = myLogin.lineEdit_id.text()
        user_PW = myLogin.lineEdit_pw.text()
  • 设置背景(后面会写一个博客)
  1. 窗口对象自带的setStyleSheet方法
​    login.setObjectName("login")

​    login.setStyleSheet("#login{background-color:green}")

​ 2、使用QPalette类

window = QMainWindow()
palette = QPalette()
palette.setColor(QPalette.Background, Qt.red)
window.setPalette(palette)

祝大家生活开心,学习开心!

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要实现登录注册界面的跳转,可以采用以下步骤: 1. 创建两个窗口类,一个是登录界面类,一个是注册界面类。 2. 在登录界面类中添加一个“注册”按钮,点击该按钮时,创建注册界面类的实例。 3. 在注册界面类中添加一个“返回登录”按钮,点击该按钮时,关闭注册界面,返回登录界面。 以下是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class LoginWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('登录界面') # 添加注册按钮 self.btn_register = QPushButton('注册', self) self.btn_register.move(100, 100) self.btn_register.clicked.connect(self.showRegisterWindow) def showRegisterWindow(self): self.register_window = RegisterWindow() self.register_window.show() class RegisterWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('注册界面') # 添加返回登录按钮 self.btn_back = QPushButton('返回登录', self) self.btn_back.move(100, 100) self.btn_back.clicked.connect(self.close) if __name__ == '__main__': app = QApplication(sys.argv) login_window = LoginWindow() login_window.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了两个窗口类 LoginWindow 和 RegisterWindow,并在 LoginWindow 中添加了一个“注册”按钮,点击该按钮时创建 RegisterWindow 的实例,从而实现了登录界面到注册界面的跳转;在 RegisterWindow 中添加了一个“返回登录”按钮,点击该按钮时关闭注册界面,返回登录界面,从而实现了注册界面到登录界面的跳转
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值