PyQt5中信號連接槽的方法

信號連接槽的方法有4種:

  1. 在創(chuàng)建 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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 信號和槽(Signals and Slots) Qt庫第一個認識到在幾乎所有情況下,程序員不需要或甚至不想知道所有...
    珞珈村下山閱讀 10,157評論 0 23
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 轉自:作者簡介作者:唐新華 (xhsmart@263.net)軟件工程師 ?? 信號和槽作為QT的核心機制在QT編...
    njukay閱讀 1,420評論 0 49
  • 文|袁小球 今年在一個公司實習的時候,遇見了一個讓我充滿好奇的女人。公司是開放式的辦公環(huán)境,每天早晨有人定時打掃。...
    袁小球閱讀 34,865評論 252 1,378

友情鏈接更多精彩內容