Qt for Python

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 GUI] QtQuick/QML 與 QtWidgets 的選擇

上一篇文章([Qt for Python] PySide 與 PyQt 的選擇)我簡單敘述了PySide跟PyQt的比較,不論你的最終選擇為何,對於初次選擇Qt作為GUI開發框架的學習者來說,一開始可能又會面臨到另一個困擾,就是QtQuick/QML跟QtWidgets的差異與選擇,所以在進入正式的系列文章之前,先來談談這個問題。 跟上一篇相同,先講結論,我認為選QtQuick/QML就對了。原因很多,不過我一樣列了三個最主要的理由,如下。 第一、完美切割 UI 跟 bussiness logic 對網頁程式開發有一定了解的開發者來說,對於 MVC 這個設計概念應該都不陌生。採用QtQuick/QML開發UI的話,等於是天然的MVC架構,完全把UI的邏輯跟商業邏輯切割清楚,不論你在商業邏輯的實作部份,是用C++或Python,都可以容易地在設計上符合MVC的設計理念。 雖然說,QtWidgets也是有獨立的UI檔案,是基於XML的文件。但在UI的操作邏輯,還是得透過C++或Python的實作來達成。光這一點優勢,就有足夠的理由選擇QtQuick/QML來實作UI。

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 三寶爸工程師