Возможные обработчики сигнала:
- Функция
- Объект (если есть метод
__call__()
) - Метод объекта (или класса)
from PyQt4 import QtCore, QtGui
import sys
def on_clicked():
print("Function!")
class Handler():
def __init__(self,x=0):
self.x = x
def __call__(self):
print("__call__,", end=' ')
print("x =",self.x)
def on_clicked(self):
print("Method")
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
but1 = QtGui.QPushButton("Press here")
but2 = QtGui.QPushButton("Press here")
but3 = QtGui.QPushButton("Press here")
but4 = QtGui.QPushButton("Press here")
hbox = QtGui.QHBoxLayout()
hbox.addWidget(but1)
hbox.addWidget(but2)
hbox.addWidget(but3)
hbox.addWidget(but4)
window.setLayout(hbox)
obj = Handler(4)
QtCore.QObject.connect(but1,QtCore.SIGNAL("clicked()"),on_clicked)
QtCore.QObject.connect(but2,QtCore.SIGNAL("clicked()"),obj.on_clicked)
QtCore.QObject.connect(but3,QtCore.SIGNAL("clicked()"),obj)
QtCore.QObject.connect(but4,QtCore.SIGNAL("clicked()"),obj) # несколько
QtCore.QObject.connect(but4,QtCore.SIGNAL("clicked()"),on_clicked) # обработчиков
window.show()
sys.exit(app.exec_())
Пример с классом, в котором создаются кнопки и определяется их поведение:
from PyQt4 import QtCore, QtGui
import sys
class Butt():
def __init__(self,text,box):
#QtGui.QPushButton.__init__(parent)
self.text = text
self.but = QtGui.QPushButton(text)
box.addWidget(self.but)
self.but.connect(self.but,QtCore.SIGNAL("clicked()"),self.printer)
def printer(self):
print(self.text)
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
hbox = QtGui.QHBoxLayout()
b1 = Butt("Hello",hbox)
b2 = Butt("Goodbye",hbox)
window.setLayout(hbox)
window.show()
sys.exit(app.exec_())