PySide

Qt for Python

[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, second

By 三寶爸工程師

Qt for Python

[Qt QML] 如何呼叫Python class functions

之前我寫了一篇文章,[Qt QML] 如何呼叫C++ class functions,簡單示範了如何從以QML撰寫的GUI來呼叫C++層所定義的class function。相同的,這篇文章則是把C++實作的部分改成用Python實作,實作目標與該篇文章的範例程式一樣,「等待三秒將應用程式關閉」。首先貼上這個範例程式的執行結果,其實就跟該篇文章看到的一樣。這篇的重點是如何在QML中呼叫Python的類別function,所以下面就簡單說明一下Python程式碼的部分,至於QML的部分,跟上面提到的那篇文章中是一樣的。 Python程式碼部分 跟該篇文章一樣,我定義了一個類別,一樣名為Controller,也宣告了一個類別function名為quitApp()。 因為Pyside並沒有像在C++一樣有提供Q_INVOKABLE這樣的marco,所以要讓QML可以呼叫Python類別function的話,就是利用如同C++中的另一個方法,也就是定義為slot function,做法是只要在function之前加一個“decorators”,為“@Slot”,如下。 @Slot(i

By 三寶爸工程師

Qt for Python

[Qt for Python] PySide 與 PyQt 的選擇

Python是目前全世界最多人使用的程式語言,也是應用範圍最廣的程式語言之一。除了當今最火紅的AI人工智慧領域外,舉凡網頁應用程式、桌面應用程式,甚至手機應用程式,都能看到Python的蹤跡。 在桌面應用程式的部分,Python能搭配的GUI框架有非常多種選擇,其中又以Qt這套跨平台GUI開發框架最為廣為人知。然而,Qt for Python卻有著複雜的歷史,導致目前市面上是有兩套GUI套件可供開發者選擇,分別是PySide和PyQt。如果你對於相關歷史有興趣,請參考下面這部影片。 該如何選擇? 那這兩個該如何選擇呢?這不是什麼大人跟小孩的選擇,直接說我全都要這麼簡單的。先講結論,兩者都可以選擇,但我會建議選擇PySide。下面的篇幅從三個層面來簡單分析,說明為何我這樣建議的理由。 第一、套件提供來源 PySide是由Qt官方(The Qt Company)所提供的Python for Qt的套件,雖然有一陣子它的套件維護和更新不及於PyQt,但隨著Python越來越多人使用的情況下,Qt官方對Python的支援程度,也跟著其主要的C++函式庫的腳步,持續著更新及維護。所

By 三寶爸工程師