PyQt5 訊號和槽

與控制檯或終端應用程式不同,圖形應用程式(GUI)是事件驅動的。使用者操作(如單擊按鈕或選擇列表中的專案)稱為事件。

如果發生事件,每個 PyQt5 小控制元件都可以發出訊號。訊號不執行任何操作,即由槽完成。

PyQt5 訊號和槽介紹

考慮下這個例子:

button.clicked.connect(self.slot_method)

按鈕單擊(訊號)連線到動作(槽)。在此示例中,如果訊號發出,將呼叫方法 slot_method

將槽方法或函式連線到視窗小控制元件的原則適用於所有視窗小控制元件,

widget.signal.connect(slot_method)

或者我們可以明確定義訊號:

QtCore.QObject.connect(widget, QtCore.SIGNAL(signalname), slot_function)

PyQt 支援多種型別的訊號,而不僅僅是點選。

PyQt5 訊號和槽示例

我們可以建立連線到視窗小控制元件的方法(槽)。槽是任何可呼叫的函式或方法。

[PyQt5 視窗](/img/Tutorial/PyQt5/PyQt5 Button Click.png)

在執行應用程式時,我們可以單擊按鈕執行操作(槽)。

from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
        QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
        QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit,
        QVBoxLayout)

import sys

class Dialog(QDialog):

    def slot_method(self):
        print('slot method called.')

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

        button=QPushButton("Click")
        button.clicked.connect(self.slot_method)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(button)

        self.setLayout(mainLayout)
        self.setWindowTitle("Button Example - tastones.com")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = Dialog()
sys.exit(dialog.exec_())