当前位置: 首页 > news >正文

Python----PyQt开发(PyQt高级:界面切换,信号与槽功能pyqtSignal)

一、效果展示

 

二、设计PyQt界面 

主页面 

self.setWindowTitle("主界面")

self.login_btn = QPushButton("登录", self)
self.login_btn.setGeometry(200, 50, 100, 40)

self.reg_btn = QPushButton("注册", self)
self.reg_btn.setGeometry(200, 120, 100, 40)

self.exit_btn = QPushButton("退出", self)
self.exit_btn.setGeometry(200, 190, 100, 40)

登录页面 

class loginWidge(QWidget):
    send_index = pyqtSignal()  # 定义信号,用于返回主界面

    def __init__(self):
        super().__init__()  # 调用父类的初始化方法
        self.setWindowTitle('登录界面')  # 设置窗口标题
        self.setGeometry(700, 400, 600, 500)  # 设置窗口位置和大小

        # 创建返回按钮
        self.exit_index_btn = QPushButton('返回', self)
        self.exit_index_btn.setGeometry(200, 50, 200, 80)

注册页面 

class RegQwidget(QWidget):
    send_index = pyqtSignal()  # 定义信号,用于返回主界面
    send_login = pyqtSignal(str, int)  # 定义信号,用于发送登录信息

    def __init__(self):
        super().__init__()  # 调用父类的初始化方法
        self.setWindowTitle('注册界面')  # 设置窗口标题
        self.setGeometry(700, 400, 600, 500)  # 设置窗口位置和大小

        # 创建返回按钮
        self.exit_index_btn = QPushButton('返回', self)
        self.exit_index_btn.setGeometry(200, 50, 200, 80)

三、槽连接组件交互 

3.1、从主页面到副页面

    def slot_init(self):  
        # 连接按钮点击事件到相应的槽函数  
        self.login_btn.clicked.connect(self.login_wid)  
        self.reg_btn.clicked.connect(self.reg_wid)  
        self.exit_btn.clicked.connect(self.exit_wid)  
    def login_wid(self):
        self.close()  # 关闭主窗口
        self.login_show.show()  # 显示登录窗口
    def reg_wid(self):
        self.close()  # 关闭主窗口
        self.reg_show.show()  # 显示注册窗口
    def exit_wid(self):
        # 弹出确认退出的消息框
        self.result = QMessageBox.question(self, '提示', '确定要退出吗', QMessageBox.Yes | QMessageBox.No)
        if self.result == QMessageBox.Yes:
            sys.exit(0)  # 确认退出,结束程序
        else:
            pass  # 选择不退出,什么都不做

3.2、从副页面返回主页面

    def login_wid(self):
        self.close()  # 关闭主窗口
        self.login_show.show()  # 显示登录窗口
    def indexwid_show(self):
        self.close()  # 关闭登录窗口
        self.send_index.emit()  # 发射返回主界面的信号
  • 注册窗口的 send_login 信号连接到登录窗口的 send_recv 槽函数,实现了注册信息从注册窗口到登录窗口的传递。

  • 登录窗口和注册窗口的 send_index 信号连接到主窗口的 show 槽函数,实现了点击返回按钮后主窗口的显示。

四、用到的库函数

Qt Widgets 和布局:
        QWidget: 创建基本的窗口部件。
        QPushButton: 创建按钮。
        QMessageBox: 创建消息框,用于显示提示信息。
        QProgressBar: 创建进度条(虽然在这段代码中没有使用,但导入了该类)。


Qt Core:
        QApplication: 应用程序类,管理应用的控制流和主要设置。
        QTimer: 定时器类(虽然在这段代码中没有使用,但导入了该类)。
        pyqtSignal: 定义信号,用于在类之间传递信息。


信号和槽:
        clicked.connect(): 连接按钮点击事件到槽函数。
        send_index.connect(): 连接自定义信号到槽函数。
        send_login.connect(): 连接自定义信号到槽函数。


窗口设置:
        setWindowTitle(): 设置窗口的标题。
        setGeometry(): 设置窗口的位置和大小。


控制窗口显示:
        show(): 显示窗口。
        close(): 关闭窗口。

五、完整代码

import random  # 导入随机数模块  
from PyQt5.QtCore import QTimer, pyqtSignal  # 导入定时器和信号  
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QProgressBar  # 导入Qt小部件  
import sys  # 导入系统模块以处理命令行参数  

# 创建主窗口类  
class MyQwidget(QWidget):  
    def __init__(self):  
        super().__init__()  # 调用父类的初始化方法  
        self.ui_init()  # 初始化用户界面  
        self.slot_init()  # 初始化信号与槽  

    def ui_init(self):  
        self.setWindowTitle('主界面')  # 设置窗口标题  
        self.setGeometry(700, 400, 600, 500)  # 设置窗口位置和大小  

        # 创建登录按钮  
        self.login_btn = QPushButton('登录', self)  
        self.login_btn.setGeometry(200, 50, 200, 80)  

        # 创建注册按钮  
        self.reg_btn = QPushButton('注册', self)  
        self.reg_btn.setGeometry(200, 200, 200, 80)  

        # 创建退出按钮  
        self.exit_btn = QPushButton('退出', self)  
        self.exit_btn.setGeometry(200, 350, 200, 80)  

        # 创建登录和注册窗口实例  
        self.login_show = loginWidge()  
        self.reg_show = RegQwidget()  

        # 连接注册窗口的信号到登录窗口的接收函数  
        self.reg_show.send_login.connect(self.login_show.send_recv)  

    def slot_init(self):  
        # 连接按钮点击事件到相应的槽函数  
        self.login_btn.clicked.connect(self.login_wid)  
        self.reg_btn.clicked.connect(self.reg_wid)  
        self.exit_btn.clicked.connect(self.exit_wid)  

        # 连接登录和注册窗口的返回信号到主窗口的显示函数  
        self.login_show.send_index.connect(self.show)  
        self.reg_show.send_index.connect(self.show)  

    def login_wid(self):  
        self.close()  # 关闭主窗口  
        self.login_show.show()  # 显示登录窗口  

    def reg_wid(self):  
        self.close()  # 关闭主窗口  
        self.reg_show.show()  # 显示注册窗口  

    def exit_wid(self):  
        # 弹出确认退出的消息框  
        self.result = QMessageBox.question(self, '提示', '确定要退出吗', QMessageBox.Yes | QMessageBox.No)  
        if self.result == QMessageBox.Yes:  
            sys.exit(0)  # 确认退出,结束程序  
        else:  
            pass  # 选择不退出,什么都不做  

# 创建登录窗口类  
class loginWidge(QWidget):  
    send_index = pyqtSignal()  # 定义信号,用于返回主界面  

    def __init__(self):  
        super().__init__()  # 调用父类的初始化方法  
        self.setWindowTitle('登录界面')  # 设置窗口标题  
        self.setGeometry(700, 400, 600, 500)  # 设置窗口位置和大小  

        # 创建返回按钮  
        self.exit_index_btn = QPushButton('返回', self)  
        self.exit_index_btn.setGeometry(200, 50, 200, 80)  
        self.exit_index_btn.clicked.connect(self.indexwid_show)  # 连接按钮点击事件  

    def indexwid_show(self):  
        self.close()  # 关闭登录窗口  
        self.send_index.emit()  # 发射返回主界面的信号  

    def send_recv(self, arg, arg1):  
        print(arg, arg1)  # 打印接收到的信号参数  

# 创建注册窗口类  
class RegQwidget(QWidget):  
    send_index = pyqtSignal()  # 定义信号,用于返回主界面  
    send_login = pyqtSignal(str, int)  # 定义信号,用于发送登录信息  

    def __init__(self):  
        super().__init__()  # 调用父类的初始化方法  
        self.setWindowTitle('注册界面')  # 设置窗口标题  
        self.setGeometry(700, 400, 600, 500)  # 设置窗口位置和大小  

        # 创建返回按钮  
        self.exit_index_btn = QPushButton('返回', self)  
        self.exit_index_btn.setGeometry(200, 50, 200, 80)  
        self.exit_index_btn.clicked.connect(self.indexwid_show)  # 连接按钮点击事件  

    def indexwid_show(self):  
        self.close()  # 关闭注册窗口  
        self.send_index.emit()  # 发射返回主界面的信号  
        self.send_login.emit('注册', 123)  # 发射登录信息信号,发送示例数据  

if __name__ == '__main__':  
    app = QApplication(sys.argv)  # 创建QApplication对象,传入命令行参数  
    w = MyQwidget()  # 创建主窗口对象  
    w.show()  # 显示主窗口  
    sys.exit(app.exec_())  # 进入应用的主循环

其主要是实现信号与槽功能

在本代码实现过程中:

  • 注册窗口的 send_login 信号连接到登录窗口的 send_recv 槽函数,实现了注册信息从注册窗口到登录窗口的传递。

  • 登录窗口和注册窗口的 send_index 信号连接到主窗口的 show 槽函数,实现了点击返回按钮后主窗口的显示。

信号与槽函数参数设计规则:

《1》信号的参数个数要>=槽函数参数的个数信号参数有3个槽函数参数可以有1个、2个、3个这三种情况

《2》槽函数参数的类型与信号参数类型的匹配顺序必须是从左向右的信号的参数类型strint槽函数如果有一个参数,只能是str类型槽函数如果有两个参数,只能是str、int类型 

相关文章:

  • Java基础概念
  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • Typora“使用”教程
  • SpringBoot开发——初步了解SpringBoot
  • UE_C++ —— UObject Instance Creation
  • AcWing——1571. 完美序列
  • 无人机航迹规划:互联银行系统优化(Connected Banking System Optimizer,CBSO)求解无人机路径规划MATLAB
  • JavaScript作用域与闭包
  • 数字内容体验优化策略:全渠道整合与高效转化实践
  • NVIDIA Jetson Orin Nano 刷机过程
  • Unity Shader Graph 2D - Procedural程序化图形循环的箭头
  • 《AI大模型开发笔记》deepseek提示词技巧
  • 易语言写NFC标签URI网址NDEF记录
  • 17.企业级知识图谱中的知识库全景解析(基本概念、 5W2H视角知识库、存储格式分类与技术对比、实践路径与架构设计、案例)
  • 分享一个使用的音频裁剪chrome扩展-Ringtone Maker
  • android 源码切换分支
  • 第 15 天:数据存储,打造存档 读取系统!
  • CAD字体 SHX字体下载
  • Lineageos 22.1(Android 15)更换开机动画
  • Python函数进阶250215
  • 母亲节书单|关于生育自由的未来
  • 匈牙利史专家阚思静逝世,享年87岁
  • 云南多地突查公职人员违规饮酒:公安局门口开展酒精吹气测试
  • 白宫启动“返乡计划” ,鼓励非法移民自愿离开美国
  • 溢价26.3%!保利置业42.4亿元竞得上海杨浦宅地,楼板价80199元/平方米
  • 壹基金发布2024年度报告,公益项目惠及937万人次