PyQt 信号和槽位

PyQt 信号和槽位

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

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

在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)

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()函数。

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

例子

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

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

PyQt - 信号和槽位

输出

Button 1 clicked
Button 2 clicked

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程