【python】pyqt5 信号与槽

举例说明信号与槽的关系

实现功能:按下button关闭窗口

方法一

在QTdesigned 里面按快捷键F4,进入信号与槽编辑页面,鼠标左键按住button,拖动到button外,自动打开配置信号与槽连接配置页面,页面左边是信号,右边是槽,直接勾选即可。
若右边没有可以自定义相关槽函数,但函数名不能是方法二中的名字。按照此方法生成的ui文件在转换成py文件之后会在代码中生成连接信息。为确保ui与业务逻辑分离,不建议此操作。建议采用方法二,或者直接在业务逻辑中实现信号与槽函数的连接操作。
信号与槽

方法二

QTdesigned里面不做连接操作,直接生成ui文件,调用UIC,将ui文件生成py代码,实现过程可参照我的另一篇博客。
在ui的py代码中可以看到如下函数

QtCore.QMetaObject.connectSlotsByName(mainWindow)

该函数意思是通过名字自动连接信号与槽
ObjectName的控件对应的槽函数名称为on_ObjectName_Singal()
举例说明:
按钮btnOK,对应的槽函数为on_btnOK_clicked()
自定义窗口类中实现该槽函数即可。注意,槽函数前需要加修饰符@pyqtSlot()
修饰符需导入模块from PyQt5.QtCore import pyqtSlot

Talk is cheap, show me the code


class MyWindows(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_mainWindow()
        self.ui.setupUi(self)

    @pyqtSlot()
    def on_btnCleanLog_clicked(self):
        # do what you want to do here
        
    # @pyqtSlot()
    def closeEvent(self, event):
        reply = QMessageBox.question(self, '警告', "你确定要关闭窗口?",
                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        # 判断返回值,如果点击的是Yes按钮,我们就关闭组件和应用,否则就忽略关闭事件
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值