这里通过两个案例来介绍一下信号与槽。第一个案例是用过点击按钮,通过click信号连接自定义的槽函数,来打印出来一句话。第二个案例是监听窗口的标题变化,并为窗口名添加前缀。

案例1

通过点击按钮打印一句话:

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.ObjectOperation()

    def ObjectOperation(self):
        """***********信号与槽的第一个案例********"""
        btn = QPushButton(self)
        btn.setText("我是按钮点击我")

        # 定义一个槽函数
        def cao():
            print("点我干啥")

        # clicked表示按钮的点击信号
        btn.clicked.connect(cao)


# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果

案例2

在所有窗口修改窗口的标题时,添加前缀52txr-,例如修改标题为HELLOPYQT,会自动修改为52txr-HELLOPYQT,并且要支持多次修改。

涉及知识点:

  • 设置窗口标题
  • 监听窗口标题发生改变
  • 临时取消/恢复信号与槽之间的链接
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *

# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    window = QWidget()

    # 连接窗口变化的信号与槽
    def cao(title):
        print("变化了", title)
        # window.windowTitleChanged.disconnect()  # 断开,防止递归
        window.blockSignals(True)
        window.setWindowTitle("52txr-"+title)
        # window.windowTitleChanged.connect(cao)  # 恢复连接
        window.blockSignals(False)

    window.windowTitleChanged.connect(cao)

    window.setWindowTitle("HELLO PYQT1")
    # window.setWindowTitle("HELLO PYQT2")
    # window.setWindowTitle("HELLO PYQT3")

    window.show()
    sys.exit(app.exec_())

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/SignalAndSlot2.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 25 日
如果觉得我的文章对你有用,请随意赞赏