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は変更されたデータに依存する全ての式を自動更新します。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 継承 2.1 日本 ライセンスの下に提供されています。