QtのプロパティをPySideで使う
Using Qt Properties in PySideを翻訳。
PySide は Property
関数を提供しており、
Pythonで書かれたgetter・setter関数を使って、
QtのプロパティとしてもPythonのプロパティとしてもふるまうようなプロパティを、
定義することが出来ます。
以下は、QtのプロパティをPythonからの定義・アクセスする簡単な例です。
class MyObject(QObject): def __init__(self,startval=42): self.ppval = startval def readPP(self): return self.ppval def setPP(self,val): self.ppval = val pp = Property(int, readPP, setPP) obj = MyObject() obj.pp = 47 print obj.pp
PySideのプロパティシステムの完全な仕様は
PSEP 103 [pyside.org]にあります。
QML式でのプロパティ
もし、QML式の中でオブジェクトのプロパティを使いたいなら、
そのプロパティはNOTIFYableでなくてはなりません。
(訳注:NOTIFYable=通知可能。ここではProperty関数のnotify引数が与えられている事)
以下は、シンプルなシグナルを使用する例です。
class Person(QtCore.QObject): def __init__(self, name): QtCore.QObject.__init__(self) self._person_name = name def _name(self): return self._person_name @QtCore.Signal def name_changed(self): pass name = QtCore.Property(unicode, _name, notify=name_changed)
(訳注:原文のサンプルは編集ミスで本文に混じっていたので、適当に訂正)
データは変更されたときにシグナルが発信され、QMLは変更されたデータに依存する全ての式を自動更新します。