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_())