PyQt5 – 信号和插槽

PyQt5 – 信号和插槽

与控制台模式的应用程序不同,它是以顺序方式执行的,而基于GUI的应用程序是事件驱动的。函数或方法是根据用户的动作来执行的,如点击按钮、从集合中选择一个项目或鼠标点击等,称为事件。

用于构建GUI界面的部件是这类事件的来源。每个派生于QObject类的PyQt widget都被设计成在响应一个或多个事件时发出 “信号”。信号本身并不执行任何动作。相反,它被 “连接 “到一个 “槽”。这个槽可以是任何可调用的Python函数。

使用Qt Designer的信号/插槽编辑器

首先设计一个带有LineEdit控件和PushButton的简单表单。

PyQt5 - 信号和插槽

我们希望,如果按钮被按下,文本框的内容应该被清除。QLineEdit小组件有一个clear()方法来实现这个目的。因此,按钮的点击信号将被连接到文本框的clear()方法。

首先,从编辑菜单中选择编辑信号/槽(或按F4)。然后用鼠标选中按钮,将光标拖向文本框

PyQt5 - 信号和插槽

当鼠标被释放时,一个显示按钮信号和插槽方法的对话框将被显示出来。选择被点击的信号和clear()方法

PyQt5 - 信号和插槽

右下方的信号/插槽编辑器窗口将显示结果——。

PyQt5 - 信号和插槽

保存ui和Build,并从ui文件中提取Python代码,如下面的代码所示。

pyuic5 -x signalslot.ui -o signalslot.py
self.pushButton.clicked.connect(self.lineEdit.clear)

运行signalslot.py并在LineEdit中输入一些文本。如果按钮被按下,该文本将被清除。

建立信号槽连接

不使用设计器,你可以通过以下语法直接建立信号槽连接:

widget.signal.connect(slot_function)

假设当一个按钮被点击时,有一个函数要被调用。这里,点击的信号将被连接到一个可调用的函数。它可以通过以下任何一种技术来实现

button.clicked.connect(slot_function)

示例

在下面的例子中,两个QPushButton对象(b1和b2)被添加到QDialog窗口中。我们想在点击b1和b2时分别调用函数b1_clicked()和b2_clicked()。

当b1被点击时,clicked()信号被连接到b1_clicked()函数—-。

b1.clicked.connect(b1_clicked())

当b2被点击时,clicked()信号被连接到b2_clicked()函数。

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)

   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   b2.clicked.connect(b2_clicked)

   win.setGeometry(100,100,200,100)

   win.setWindowTitle("PyQt5")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print ("Button 1 clicked")

def b2_clicked():
   print ("Button 2 clicked")

if __name__ == '__main__':
   window()

上述代码产生了以下输出 —

PyQt5 - 信号和插槽

输出

Button 1 clicked
Button 2 clicked

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程