1. 程式人生 > >支援Qt屬性

支援Qt屬性

    支援Qt屬性

PyQt5不支援設定和獲取Qt屬性,就好像它們是普通的例項屬性一樣。這是因為屬性的名稱經常與屬性的getter方法的名稱衝突。

但是,PyQt5確實使用在建立例項時傳遞的關鍵字引數來支援屬性的初始設定。例如:

act = QAction("&Save", self, shortcut=QKeySequence.Save,
        statusTip="Save the document to disk", triggered=self.save)

該示例還演示了使用關鍵字引數將訊號連線到插槽。

PyQt5還支援使用該pyqtConfigure()

方法設定屬性值(以及將訊號連線到插槽)。例如,以下結果與上面給出的結果相同:

act = QAction("&Save", self)
act.pyqtConfigure(shortcut=QKeySequence.Save,
        statusTip="Save the document to disk", triggered=self.save)

    定義新的Qt屬性

可以使用該pyqtProperty() 函式定義新的Qt屬性。它的使用方式與標準Python property() 函式相同。事實上,以這種方式定義的Qt屬性也表現為Python屬性。

PyQt5.QtCore.pyqtPropertytype [,fget = None [,fset = None [,freset = None [,fdel = None [,doc = None [,designable = True [,scriptable = True [,stored = True [,user = False [,constant] = False [,final = False [,notify = None [,revision = 0 

] ] ] ] ] ] ] ] ] ]] ] ] )

建立一個既作為Python屬性又作為Qt屬性的屬性。

引數:
  • type - 屬性的型別。它是Python型別物件或字串,是C ++型別的名稱。
  • fget - 用於獲取屬性值的可選callable。
  • fset - 用於設定屬性值的可選callable。
  • freset - 用於將屬性值重置為其預設值的可選callable。
  • fdel - 用於刪除屬性的可選callable。
  • doc - 屬性的可選docstring。
  • designable - 可選擇設定Qt DESIGNABLE標誌。
  • scriptable - 可選擇設定Qt SCRIPTABLE標誌。
  • stored - 可選擇設定Qt STORED標誌。
  • user - 可選擇設定Qt USER標誌。
  • 常量 - 可選擇設定Qt CONSTANT標誌。
  • final - 可選擇設定Qt FINAL標誌。
  • notify - 可選的未繫結通知訊號。
  • revision - 匯出到QML的修訂版。
返回型別:

屬性物件。

它也可以pyqtProperty()像標準Python property()函式一樣用作裝飾器。以下示例顯示如何int使用getter和setter 定義屬性:

from PyQt5.QtCore import QObject, pyqtProperty

class Foo(QObject):

    def __init__(self):
        QObject.__init__(self)

        self._total = 0

    @pyqtProperty(int)
    def total(self):
        return self._total

    @total.setter
    def total(self, value):
        self._total = value

如果您更喜歡Qt術語,您也可以使用write而不是 setter(而read不是getter)。