【python】pyqt5 信号与槽

python 专栏收录该内容
6 篇文章 0 订阅

举例说明信号与槽的关系

实现功能:按下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()
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值