PyQt5学习笔记(十四):发送信号&自定义槽函数

在上一篇学习笔记中,我们重构了 ESC 和 ALT 键按下时触发的信号槽过程,在本次笔记中我们可以自己决定在什么时候发送一个信号。本文由 Cescfangs 译自 ZetCode pyqt5系列教程 并作适当修改。

在本次的学习笔记中,我们将通过信号槽的绑定,在statusBar()中提示哪一个按钮被按下了,先上源代码:

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton


class exp(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(400, 400, 300, 300)
        self.setWindowTitle('sender')

        btn1 = QPushButton('Hello', self)
        btn2 = QPushButton('world', self)

        btn1.move(30, 150)
        btn2.move(150, 150)

        self.statusBar()

        btn1.clicked.connect(self.btnclicked)
        btn2.clicked.connect(self.btnclicked)

    def btnclicked(self):

        sender = self.sender()
        self.statusBar().showMessage(sender.text() + ' was clicked!')

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    ex = exp()
    ex.show()
    sys.exit(app.exec_())

通过以上的代码,我们创建了 'hello' 和 'world' 两个按钮,'hello' 按下的时候,左下角会提示 'hello was clicked!','world'按下的时候则提示 'world was clicked!'。

def btnclicked(self):    
    
    sender = self.sender()
    self.statusBar().showMessage(sender.text() + ' was clicked!')

自定义的槽函数 btnclicked,它的作用是设置 statusBar() 的内容为按钮文本+ 'was clicked!',这个函数通过:

btn1.clicked.connect(self.btnclicked)
btn2.clicked.connect(self.btnclicked)

进行连接呈现,发送的信号传送到槽函数时,我们可以使用 sender() 来判断是哪个部件发送了信号,从而做出对应的反馈,这也是自定义槽函数里经常使用的一个技巧。

动画效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 信号和槽(Signals and Slots) Qt库第一个认识到在几乎所有情况下,程序员不需要或甚至不想知道所有...
    珞珈村下山阅读 10,152评论 0 23
  • Qt学习 Qt是什么 Qt是一个跨平台的C++图形用户界面库,通过变以来跨平台,实现一个Qt支持Unix,Linu...
    I踏雪寻梅阅读 3,024评论 0 14
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,661评论 19 139
  • 认识这么一位姑娘,也算是同事吧。她93年出生,丝毫没有90后的那种矫情和骄傲,穿着朴素,每次见到都是运动鞋,牛仔...
    云朵有几种姿态阅读 193评论 0 0
  • 今天起,开始我本年度的第一个主题阅读——思维,其实关于逻辑思维、批判性思维的阅读从2月份就已经开始了,2月读的那么...
    才少说阅读 470评论 0 2

友情链接更多精彩内容