python pyqt界面跳转 讲解/笔记

提示:网上有好多这样的文章,看得我眼花缭乱,除了懵逼还是懵逼,然后就复制他们的代码,运行,慢慢读,现在是有了一点心得,也搞懂了,写下此篇博客作为学习笔记。博主是一个完完全全的小白,有什么错误请指出,谢谢~(⊙o⊙)

错误请指出,谢谢!!!

废话不多少,直接开始

import openpyxl

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, QDesktopWidget, QMessageBox, QTextEdit, QLabel,
                             QPushButton, QApplication, QMainWindow, QAction, qApp, QHBoxLayout, QVBoxLayout,
                             QGridLayout,
                             QLineEdit,QDialog)
from PyQt5.QtGui import QFont, QIcon, QIntValidator
from PyQt5.QtCore import QCoreApplication

'''00000001 12345678用户账号密码
   000001 123456管理员账号密码
   00001  12345老板账号密码
'''
acpalist = [{
    
    '00001': '12345'}, {
    
    '000001': '123456'}, {
    
    '0000001': '1245678'}]


class login(QWidget):
    def __init__(self):
        super().__init__()
        #self.loginbtn = QPushButton('登录',self)
        self.initUI()


    # ---------------------------登录界面------------------------------------
    def initUI(self):

        # 两个按钮
        loginbtn = QPushButton('登录',self)
        loginbtn.clicked.connect(loginevent)#信号槽机制——鼠标点击后执行loginevent函数
        forgetbtn = QPushButton('忘记密码',self)


        # 两个标签
        account = QLabel('账号', self)
        password = QLabel('密码', self)

        global qleaccount, qlepassword
        # 两个输入框,用这些输入框对象的方法去实现限数字输入,密文输入
        qleaccount = QLineEdit(self)
        qleaccount.setValidator(QIntValidator())  # 限制账号为整数int型
        qlepassword = QLineEdit(self)
        qlepassword.setEchoMode(qlepassword.Password)  # 密文输入,密码用圆点掩饰


        # 使用箱布局让界面更好看,move()布局是绝对定位,不好看
        haccbox = QHBoxLayout()
        haccbox.addStretch(1)
        haccbox.addWidget(account)
        haccbox.addWidget(qleaccount)
        haccbox.addStretch(1)

        hpassbox = QHBoxLayout()
        hpassbox.addStretch(1)
        hpassbox.addWidget(password)
        hpassbox.addWidget(qlepassword)
        hpassbox.addStretch(1)

        hbtnbox = QHBoxLayout()
        hbtnbox.addStretch(1)
        hbtnbox.addWidget(loginbtn)
        hbtnbox.addWidget(forgetbtn)
        hbtnbox.addStretch(1)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(haccbox)
        vbox.addLayout(hpassbox)
        vbox.addStretch(1)
        vbox.addLayout(hbtnbox)
        vbox.addStretch(1)

        self.setLayout(vbox)
        self.setGeometry(900, 400, 100, 90)
        self.setWindowTitle('ATM登录')
        self.setWindowIcon(QIcon('logo.jpg'))

class user(QDialog):#必须是Dialog不能是QWidget才能实现界面跳转
    def __init__(self):
        super().__init__()
        self.initUI()

    # ----------------------用户界面------------------------
    def initUI(self):
        # 欢迎标签
        qlwelcome = QLabel('欢迎', self)
        # qlaccnumber = QLabel(account_number, self)

        # 按钮控件
        moneyinbtn = QPushButton('存款')
        moneyoutbtn = QPushButton('取款')
        paybtn = QPushButton('转账')
        recordlookbtn = QPushButton('消费记录查询')
        moneyinbtn.clicked.connect(testevent)
        # 箱布局
        # 欢迎
        welhbox = QHBoxLayout()
        welhbox.addWidget(qlwelcome)
        # welhbox.addWidget(qlaccnumber)
        welhbox.addStretch(1)
        # 四个按钮排版
        v4btnbox = QVBoxLayout()
        v4btnbox.addStretch(1)
        v4btnbox.addWidget(moneyinbtn)
        v4btnbox.addWidget(moneyoutbtn)
        v4btnbox.addWidget(paybtn)
        v4btnbox.addWidget(recordlookbtn)
        v4btnbox.addStretch(1)

        h4btnbox = QHBoxLayout()
        h4btnbox.addStretch(1)
        h4btnbox.addLayout(v4btnbox)
        h4btnbox.addStretch(1)

        # 最后排版
        vfinallybox = QVBoxLayout()
        vfinallybox.addLayout(welhbox)
        vfinallybox.addLayout(h4btnbox)

        self.setLayout(vfinallybox)  # 放置

        self.setGeometry(1000, 600, 600, 300)
        self.setWindowTitle('user')
        self.setWindowIcon(QIcon('logo.jpg'))
class test(QDialog):
    def __init__(self):
        super().__init__()
        self.initUI
    def initUI(self):
        self.setGeometry(1000,800,600,400)
def testevent():
    test1.show()
def loginevent():
    for i in acpalist:
        tacc = list(i.items())[0][0]
        tpas = list(i.items())[0][1]
        if qleaccount.text() == tacc and len(tacc) == 5 and tpas == qlepassword.text() :
            login1.close()
            user1.show()




app = QApplication(sys.argv)

login1 = login()
user1 = user()
test1 = test()
login1.show()



sys.exit(app.exec_())

不要先去自己试图理解我的这个长长丑丑的代码(我的注释写的不全)我下面慢慢带领你解读~~

我承认,它可能有点长,长的你都看不下去,没事,直接复制粘贴运行,首先,你在登陆界面账号输入00001 密码输入12345,点击登录,ok,你想要的界面跳转来了,不,它还没结束,你点击存款,又跳转一次!!


好啦,进入正题!!!

假如你要实现三个界面的跳转就要写出三个界面啦!
上面我的这个代码分别写了三个界面 登录界面(login),用户界面(user),还有一个测试界面(test)

一个界面单独写成一个类。

注意:login这个类的父类是QWidget 而user 和 test这两个类的父类是Dialog,这很关键!!!咱不知道为啥,咱也不敢问(敬请大佬评论全区解释)

然后 我的代码设置的是 点击按钮进行界面跳转,这里用到了pyqt中的信号和槽

btn.clicked.connect()括号里是 触发的事件(可以是自己定义的一个函数),我这里是定义的了一个新的函数 loginevent,你现在回去看我代码中定义的这个函数。
可以看到我的函数内容emmm…别喷我,我这个是设置了个账号密码的匹配,你可以直接写成

def loginevent():
	login1.colse()#关闭login1登录界面
	user.show()#打开user用户界面

对于user这个类
存款这个按钮btn.clicked.connect()
也设置了一个事件(仍然是我自己定义的一个函数,当然你可以直接写成test1.show)

嘿嘿嘿,你看,是吧,是不是可以界面跳转呢~~
你学会了吗

有什么疑问就放在评论区吧~~

猜你喜欢

转载自blog.csdn.net/qq_51182221/article/details/112795242