Каждый разработчик, знакомый с Qt, знает об используемом в этой библиотеке паттерне сигналов и слотов. Традиционно синтаксис соединения сигналов и слотов в PyQt и PyKDE выглядел очень похоже на аналогичный синтаксис в C++:
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyKDE4 import kdeui
class MyGUI(QtGui.QWidget):
def __init__(self, parent=None):
super(MyGUI, self).__init__(parent)
self.pushbutton = kdeui.KPushButton()
self.pushbutton.setText("Push me!")
QObject.connect(self.pushbutton, QtCore.SIGNAL("clicked()"),
self.button_pushed)
def button_pushed(self):
print "Button clicked"
Однако в PyQt 4.5 была добавлена поддержка нового стиля соединений:
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyKDE4 import kdeui
class MyGUI(QtGui.QWidget):
def __init__(self, parent=None):
super(MyGUI, self).__init__(parent)
self.pushbutton = kdeui.KPushButton()
self.pushbutton.setText("Push me!")
# New style
self.pushbutton.clicked.connect(self.button_pushed)
def button_pushed(self):
print "Button clicked"
Будучи основанной на PyQt4, PyKDE4 также теперь поддерживает этот синтаксис. Как видите, код таких соединений выглядит гораздо компактнее и выразительнее, и более «по-питоновски». Кроме того, если раньше было трудно отследить возможные ошибки, допустив опечатку в названии сигнала или слота, то теперь любая опечатка вызовет исключение AttributeError.
Подробнее использование нового стиля описано в документации к PyQt.
Обратите внимание: если вы решили перейти с PyQt на PySide, то этот синтаксис вам пока ещё не доступен. Тем не менее, разработчики PySide планируют исправить это в будущих версиях библиотеки. Детали реализации нового стиля сигналов и слотов в PySide описаны в этом документе.



