pyqtSignalで幸せになれる


QtはSignalでプログラミングすると言っても過言ではありません。

QObject.connect(self, SIGNAL("valueChanged(int)"), self.scrollBar.setValue)
self.emit("valueChanged(int)", 10)


が、一々、"QObject"と"SIGNAL"を書くのが面倒な上、Signal名を間違えてもエラーが出ません。
大体なぜconnectがstatic関数?


・・・と思っていたら、サンプルコードにpyqtSignalなるものがありました。

from PyQt4.QtCore import * #pyqySignalはQtCoreにある
from PyQt4.QtGui  import *

class Spam(QWidget):
    valueChanged = pyqySignal("int")
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.scrollBar = QScrollBar()
        
        self.valueChanged.connect(self.scrollBar.setValue) #属性でシグナル設定
        self.valueChanged.emit(10) #属性でシグナル発行
        
        self.scrollBar.valueChanged.connect(self.setValue)
        #Qt本来のクラスも、属性でシグナルを扱える



クラス定義内でpyqySignalを代入すると、その変数名のSignalが出来ます。
QObjectの中で、メタクラスとかを使っているのかな?