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の中で、メタクラスとかを使っているのかな?