PySide2提供了一個Property函數,它允許聲明同時表現爲Qt和Python屬性的屬性,並將其setter和getter定義爲Python函數。
下面給出了一個簡單的示例,說明如何從Python定義和訪問Qt屬性:
from PySide2.QtCore import QObject,Property
class StudentMsg(QObject):
"""docstring for StudentMsg"""
def __init__(self):
QObject.__init__(self)
def readMsg(self):
return self.msgval
def setMsg(self,msg):
self.msgval = msg
MSG = Property(str,readMsg,setMsg)
student = StudentMsg()
student.MSG = "aaa"
print(student.MSG)
如果要在QML表達式中調用對象的屬性,則QML要求屬性爲在變化時有信號通知。所以需要在上面示例的基礎上增加一個信號:
from PySide2.QtCore import QObject,Property,Signal
class StudentMsg(QObject):
"""docstring for StudentMsg"""
def __init__(self):
QObject.__init__(self)
msg_changed = Signal(str)
def readMsg(self):
return self.msgval
def setMsg(self,msg):
self.msgval = msg
self.msg_changed.emit(msg)
MSG = Property(str,readMsg,setMsg,notify = msg_changed)
student = StudentMsg()
student.MSG = "aaa"
print(student.MSG)