目录

PyQt - 信号和插槽( Signals and Slots)

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

用于构建GUI界面的窗口小部件充当此类事件的来源。 每个PyQt小部件都是从QObject类派生的,旨在发出“ signal ”以响应一个或多个事件。 信号本身不会执行任何操作。 相反,它“连接”到“ slot ”。 插槽可以是任何callable Python function

在PyQt中,信号和时隙之间的连接可以以不同的方式实现。 以下是最常用的技术 -

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

当窗口小部件发出信号时,调用slot_function的更方便的方法如下 -

widget.signal.connect(slot_function)

假设在单击按钮时是否要调用函数。 这里,点击的信号将连接到可调用的函数。 它可以通过以下两种技术中的任何一种来实现 -

QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)

OR

button.clicked.connect(slot_function)

例子 (Example)

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

单击b1时,clicked()信号连接到b1_clicked()函数

b1.clicked.connect(b1_clicked())

单击b2时,clicked()信号连接到b2_clicked()函数

QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)

例子 (Example)

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui 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)
   QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)
   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())
def b1_clicked():
   print "Button 1 clicked"
def b2_clicked():
   print "Button 2 clicked"
if __name__ == '__main__':
   window()

上面的代码产生以下输出 -

信号和插槽输出

输出 (Output)

Button 1 clicked
Button 2 clicked
↑回到顶部↑
WIKI教程 @2018