Обработка сигналов в PyQT

Возможные обработчики сигнала:

  • Функция
  • Объект (если есть метод __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_())

  Вложенные классы в Python: организация кода и расширение функциональности
Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x