[Qt QML] 如何在QML裡建立與Python物件的connections
前一篇文章,[Qt QML] 如何呼叫Python class functions,示範了如何從QML呼叫Python的類別函式。這一篇延續下去,也跟QML與C++的系列文章一樣,我們看看如何建立QML跟Python的connection,其目的就是當Python物件發生一件event時,可以透過connection執行在QML這一層的slot function。
跟[Qt QML] 如何在QML裡建立與C++物件的connections這篇文章裡的範例程式一樣,點擊畫面中的按鈕,等待三秒鐘後,視窗背景變成紅色。QML程式碼的部分,一樣沒有修改,僅用Python實作相同的邏輯。
Python程式碼部分
跟C++的部分一樣,首先宣告一個Qt signal名為eventTriggered()。
eventTriggered = Signal()
當UI點擊按鈕時,呼叫triggerEvent()這個Python class function,指定三秒後去觸發上面的eventTriggered()
@Slot(int)
def triggerEvent(self, seconds):
QTimer.singleShot(1000 * seconds, self, SIGNAL("eventTriggered()"))
這裡的實作邏輯,當然還是跟C++時的相同,你可以到[Qt QML] 如何在QML裡建立與C++物件的connections比對一下,比較詳細的功能敘述也可以參考該篇文章。這篇文章可以當作該篇文章改成用Python實作時的簡短程式碼示範。
最後,一樣看看執行結果,我特地把VS Code的畫面也擷取進影片中,證明這個執行結果確實是用Python而不是C++。