【PyQt】主界面和登录界面交互简单案例

1 实现功能

  • 运行程序,登录窗口显示;
  • 登录成功后,登录窗口消失;
  • 主界面显示(携带登录用户的身份信息)。

2 主要思路

2.1 程序流程

使用main.py作为全局主窗口,login.py(login.ui) 作为子窗口。

程序入口在 main.py 中,程序先创建 主窗口,但是我没有主动显示它,而是接着创建 登录窗口并主动显示登录窗口。

2.2 用户视角

于是,此时用户看不到主窗口,只能看到一个登录窗口。用户在登录窗口中进行登录操作。若登录成功,这时登录窗口要通知主窗口,告诉主窗口你可以显示了,然后登录窗口再关闭自己(close)。

2.3 登录窗口向主窗口传递登录成功的消息

登录窗口如何向主窗口传递消息呢?

一个简单方法就是将主窗口作为登录窗口的初始参数传递进来,然后登录窗口创建一个属性将主窗口的引用保存起来,以备后用。

login.py 文件代码中的 __init__()函数的第二个参数就是主窗口的引用。

这样登录窗口类内部就可以随时引用主窗口,通过给主窗口的属性进行赋值,或者调用主窗口的函数,向主窗口传递数据和消息。

登录窗口完成自己的使命后,自己关闭自己 self.close() 。

3 示例代码

3.1 主界面代码:

main.py

# python 3.8, pyqt5, PyCharm社区版
# author: https://blog.csdn.net/qilei2010
# main.py

class MyMainWindow(QMainWindow):
    """ 软件主界面 """

    def __init__(self, parent=None):
        super().__init__()
        loadUi('mainui.ui', self)
        self.loginDlg = None        # 保存登录对话框
        self.loginUserId = None    # 保存登录成功的用户信息

    # 接收登录成功的用户信息
    def getLoginUser(userid):
        self.loginUserId = userid


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainwin = MyMainWindow()  # 创建窗体对象
    # mainwin.show()  # 此处不显示窗体,而是由登录对话框控制显示

    from login import LoginDlg
    mainwin.loginDlg = LoginDlg(mainwin)  # 创建窗体对象,将主窗口作为参数传入
    mainwin.loginDlg.show()  # 显示窗体

    sys.exit(app.exec_())  # 程序关闭时退出进程

3.2 登录窗口代码

login.py

# python 3.8, pyqt5, PyCharm社区版
# author: https://blog.csdn.net/qilei2010
# login.py

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QLineEdit, QPushButton, QLabel, QDialog
from PyQt5.uic import loadUi

class LoginDlg(QDialog):
    # 需要通过构造函数参数mainWin将主窗口传递进来
    def __init__(self, mainWin):
        super().__init__()
        loadUi('login.ui', self)
        self.mainWin = mainWin      # 保存主窗口的引用,因为要给主窗口传递信息
        self.loginbtn.clicked.connect(self.loginAct)    # 登录按钮增加点击响应函数

    def loginAct(self):
        """登录按钮响应函数"""

        # 此处省略登录验证代码
        
        # 告诉主窗口登录成功
        userId = 1949
        self.mainWin.getLoginUser(userId)    # 向主窗口传递数据
        self.mainWin.show()        # 使主窗口显示
        self.close()               # 登录使命完成,关闭自己

运行说明:运行 main.py 即可。

PyQt5是一种用于创建图形用户界面(GUI)的Python库。它提供了构建应用程序所需的工具和组件,包括用于创建界面和对话框的类。 界面是应用程序的初始界面,通常包含菜单栏、工具栏和要显示区域。我们可以使用PyQt5的QMainWindow类创建界面。首先,我们需要导入PyQt5库并创建一个QApplication实例,然后实例化QMainWindow类并设置标题和大小。接下来,我们可以添加菜单栏和工具栏,以及其他UI组件如标签、按钮和文本框。最后,我们使用show()方法显示界面。 对话框是在界面上弹出的临时窗口,用于显示特定信息或与用户进行交互PyQt5提供了几个类用于创建常见的对话框,如输入框、消息框和文件选择框。我们可以使用这些类的实例来创建对话框,设置标题和消息,以及添加按钮和其他UI组件。然后,我们可以使用exec_()方法显示对话框,并根据用户的操作进行响应。 在PyQt5中,界面和对话框都是基于QWidget类的子类。这意味着我们可以使用相同的方法和属性来修改它们的外观和行为。例如,我们可以使用setLayout()方法将布局管理器(如垂直布局或网格布局)应用于界面和对话框,以便更方便地组织和调整UI组件的位置和大小。 总之,pyQt5库提供了创建界面和对话框的类,可以帮助我们快速搭建用户友好的应用程序。通过使用适当的方法和属性,我们可以灵活地定制这些界面,并与用户进行交互
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qilei2010

送我一张彩票中了平分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值