美文网首页
PyQt5中信号连接槽的方法

PyQt5中信号连接槽的方法

作者: 大道至简峰 | 来源:发表于2017-10-11 22:55 被阅读698次

信号连接槽的方法有4种:

  1. 在创建 Widget 的时候使用信号作为关键字参数,其值为连接的槽函数名
  2. 使用信号的 connect() 方法连接到槽
  3. 使用 QWidget 的 pyqtConfigure() 方法配置
  4. 通过函数名称连接槽

下面这个例子演示了同一个信号使用不同的方法连接不同的槽的方法,也演示了如何通过 Widget 的 objectName 来找到它,还演示了如何使用 Widget 的 pyqtConfigure() 方法来配置它的属性。

signals_slots_demo.pyw

from PyQt5.QtWidgets import (QApplication, QWidget, QFontComboBox, QLabel,
                             QHBoxLayout, QPushButton, QMessageBox, QVBoxLayout)
from PyQt5.QtCore import QMetaObject


class MainWindow(QWidget):
    def __init__(self):
        super().__init__(None)

        self.initUI()

    def initUI(self):
        main_layout = QHBoxLayout()

        # 第一种信号与槽连接的方法
        cb_font = QFontComboBox(currentFontChanged=self.changeLabelFont)
        cb_font.pyqtConfigure(objectName='fontCombo', editable=False)
        # 第二种信号与槽连接的方法
        cb_font.currentFontChanged.connect(self.changeButtonFont)
        main_layout.addWidget(cb_font)

        label = QLabel()
        label.pyqtConfigure(text='示例文本!', objectName='label')

        main_layout.addWidget(label)

        closeButton = QPushButton('关闭')
        # 第三种连接信号与槽的方法
        closeButton.pyqtConfigure(objectName='button', clicked=self.close)
        main_layout.addWidget(closeButton)
        
        vhbox = QVBoxLayout()
        vhbox.addLayout(main_layout)
        vhbox.addStretch(1)
        self.setLayout(vhbox)

        # 第四种连接信号与槽的方法
        QMetaObject.connectSlotsByName(self)

    def changeLabelFont(self, c_font):
        label = self.findChild(QLabel, 'label')
        label.setFont(c_font)

    def changeButtonFont(self, c_font):
        button = self.findChild(QPushButton, 'button')
        button.setFont(c_font)

    def on_fontCombo_currentFontChanged(self, c_font):
        """
        通过 Widget 的 objectName 来连接槽,槽的名称如下所示:
        on_<object name>_<signal name>(<signal parameters>)
        在我们的这个例子中, object name 是 fontCombo; signal name 是 currentFontChanged; 信号的参数是 c_font, 表示选择的字体
        """
        QMessageBox.information(self, '提示信息', '选择的字体名称是: <b>%s</b>' % c_font.family())


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.resize(500, 400)
    w.show()
    sys.exit(app.exec_())
signals_slots_demo.gif

相关文章

  • PyQt5中信号连接槽的方法

    信号连接槽的方法有4种: 在创建 Widget 的时候使用信号作为关键字参数,其值为连接的槽函数名 使用信号的 c...

  • PyQt5 信号与槽

    PyQt5:PyQt5 信号与槽(PyQt5的事件处理机制) - 老π - 博客园 (cnblogs.com)[h...

  • Qt 拾遗 003 disconnect

    QObject 提供了如下静态方法: disconnect 用于将对象发送方中的信号与对象接收方的信号槽连接方法断...

  • 2019-02-18 信号和信号槽

    PyQt5:PyQt5 信号与槽(PyQt5的事件处理机制) 一、事件 在事件模型,有三个参与者:事件源、事件目标...

  • WebRTC信号和槽机制

    信号和槽的实现原理大致是这样的 : 信号对象持有连接,连接里记录了槽对象的地址和槽函数(某个成员函数)地址信号对象...

  • PyQt5中的信号和槽

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 前言 信号(Signa...

  • PyQT5信号槽

    官方文档: http://pyqt.sourceforge.net/Docs/PyQt5/signals_slot...

  • 在PYQT5中,点击主窗口中的按钮,弹出子窗口。

    需求: 在PYQT5中,点击主窗口中的按钮,弹出子窗口。 测试代码: 例1: 在主窗口添加按钮,并把按钮信号关联槽...

  • PyQt5信号与槽

    来自:(https://blog.csdn.net/broadview2006/article/details/8...

  • QtCreator转换Qt5风格信号槽连接

    这一方法可以将Qt5版本以下旧式的信号槽连接转换为Qt5风格的连接。 使用方法 鼠标指向connect函数名; 右...

网友评论

      本文标题:PyQt5中信号连接槽的方法

      本文链接:https://www.haomeiwen.com/subject/wtegyxtx.html