GitHub连接:
本专栏所有源代码的GitHub直通车
这篇博客本来在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()
- 设置背景(后面会写一个博客)
- 窗口对象自带的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)
祝大家生活开心,学习开心!