Qt for Python使用Qt中的Properties

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章