PyQt5 信号和槽

PyQt5 信号和槽

与顺序执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的。函数或方法按照用户的操作(例如点击按钮、从集合中选择项目或点击鼠标等)来执行,这些操作被称为 事件

用于构建GUI界面的小部件充当这些事件的来源。每个PyQt小部件都是从QObject类派生而来,设计为响应一个或多个事件而发出 信号 。信号本身不执行任何操作,而是与一个 连接。槽可以是任何可调用的Python函数。

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

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

PyQt5 信号和槽

如果按下按钮,则希望清空文本框的内容。QLineEdit小部件具有clear()方法来实现此目的。因此,按钮的 clicked 信号将连接到文本框的 clear() 方法。

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

PyQt5 信号和槽

当鼠标释放时,会显示一个对话框,其中显示按钮的信号和槽的方法。选择clicked信号和clear()方法。

PyQt5 信号和槽

底部右侧的信号/插槽编辑器窗口将显示结果 –

PyQt5 信号和槽

从ui文件中保存ui并构建和Python代码,如下所示的代码−

pyuic5 -x signalslot.ui -o signalslot.py

生成的Python代码将通过以下语句来建立信号和槽之间的连接:−

self.pushButton.clicked.connect(self.lineEdit.clear)

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

建立信号槽连接

您可以直接使用下面的语法建立信号槽连接,而无需使用 Designer:

widget.signal.connect(slot_function)

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

button.clicked.connect(slot_function)

示例

在下面的示例中,我们在QDialog窗口中添加了两个QPushButton对象(b1和b2)。我们希望在点击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教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程