PyQt4--信号和槽

与一般按顺序执行的控制台模式的应用程序不同,基于GUI的程序是由事件驱动的。事件events是响应用户动作的函数或方法,比如点击按钮、选择项目、鼠标点击等。用来构建GUI界面的挂件Widgets是这些事件的来源。每个PyQt Widget,都派生自QObject类,用来发射“信号”signals来响应一个或多个事件。信号本身不执行动作,它们连接到“槽”slot上。“槽”是可调用的Python函数。

在PyQt中,信号和槽的连接有多种方式。

最常用的方式是:

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

更方便的方式是当widget发射signal时,调用slot函数:

widget.signal.connect(slot_function)

以下是两种方式的举例:

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
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()

原文链接:https://www.codercto.com/a/19032.html
关于信号和槽还可以自定义信号,可参考:http://www.broadview.com.cn/article/824

你可能感兴趣的:(python)