翻譯 | Qt for Python的技術願景前瞻

本文翻譯自Technical vision for Qt for Python - What lies ahead
原文作者:Cristián Maureira-Fredes,Qt公司軟件開發工程師
校審: 王富湧、Richard Lin

 

上一篇博文中,我們介紹了Qt的下一個主要版本的技術願景,我們覺得僅僅用一個段落描述Qt for Python並不足以涵蓋我們在未來版本中考慮的所有特性和改進。

 

向Qt 6過渡

將Qt這樣的一個龐大的框架暴露到另一種語言並非易事,這也是將舊版本的PySide從Qt 4向Qt 5移植時進展緩慢的主要原因。

開發人員花了大量的時間來適應Qt 5的新的API,更重要的是編寫綁定生成器工具以保證所有事情都可以被正確的處理。

Qt 6就不一樣了,因爲Qt for Python的開發與Qt 6的C++和QML的開發是同步進行的,希望到時發生意外的機率會少很多。實際上在當前Qt 5.x的版本發佈中已經體現出來了,PySide2幾乎與Qt發行版同時可用,偶爾可能會延遲幾天。

自Qt 5.12.0正式發佈以來,Qt for Python的下載量日益增加,這也意味着社區對該項目的肯定。



PyPi上的5.12.0穩定版發佈以來的下載情況

 


我們爲什麼開發Qt for Python

最早的幾行代碼逐漸演變成第一個Qt發行版的日期可以追溯到90年代早期,巧合的是,這與Python的誕生日期大致相同。

這兩個項目的出發點都是爲了讓開發人員的工作更輕鬆。這兩個項目相結合總是一個好主意,自從PySide正式發佈以來,我們已經看到了Qt for Python社區的巨大發展。

我們不能自欺欺人而不考慮Python的另一種Qt綁定PyQt。

從PySide開始,我們就一直試圖保持與PyQt在源代碼上的兼容性。PyQt用戶也一直支持PySide,他們表示主要的區別僅僅是更改了導入名稱。這讓Qt for Python項目的開發者非常開心。

這兩組綁定都非常成熟,但是我們想更進一步。事實上,我們已經做出了一些獨立分離的決定,比如不暴露QVariant等。

目前,我們爲使用Qt for Python的兩類開發者提供了以下特性:


C++開發者

  • 快速原型:考慮到某些項目的需求,在不需要太多設置的情況下快速地對一個想法進行原型開發是非常方便的。通常只需要一個pip安裝,然後進行pyside2的調用。如果經過一些迭代之後,應用程序確實需要更高性能的行爲或強類型語言,那麼將代碼轉換到C++也非常簡單。

 

使用PySide2寫一個示例程序

 

 

  • 嵌入Python:現有的(Qt/ C++)應用程序可以通過使用Python進行擴展,可以通過一個插件系統,甚至可以通過一個嵌入式解釋器來控制應用程序的方方面面。

 

具有嵌入式Python解釋器的Qt/ C++應用程序,該解釋器通過執行文本代碼,可以對Qt/ C++應用程序本身進行修改。

 

 

Python開發者

  • 一個強大的GUI開發框架:使用Python創建圖形用戶界面有很多選項,但是Qt提供了一個完整而強大的框架,它已經被證明能夠完美實現GUI的幾乎所有需求。我們一直在跟蹤其他模塊,從而獲得一些更好的想法並做出進一步的貢獻,這樣就可以在下一個版本中包含這些內容。

 

PySide2安裝流程

 

  • 綁定生成:創建Python模塊可能是一項困難的任務,目前許多項目都試圖提供一個簡單的接口來實現這一點。Shiboken現在越來越主流,它可以處理任何C++項目。基於許多客戶和用戶的經驗,我們的工具足以爲現有的C++項目提供Python綁定。比如可以看看Gamry Instruments是怎麼做的。

 

使用Shiboken編寫一個“Hello World”的示例程序

 

 


Qt for Python的未來


自從我們發佈了第一個Qt官方的Python/Pyside2以來,我們已經收集了很多反饋。主要觀點如下:

 

  • 命名,由於模塊的版本控制與Qt for Python相比是一個獨立的編號,因此很多時候我們的用戶對模塊的版本控制會感到困惑,因此我們決定從Qt6開始遵循Qt版本控制。名稱本身將保留,因此發行版將是PySide 6。

  • Python2的支持,從2020年開始Python2將不再被維護,我們也做出了同樣的決定,一旦PySide6發佈,我們將放棄對它的支持。在內部,這將解決我們目前同時處理Python2和Python3的許多問題。

  • Python化,將C++ API暴露給Python模塊會讓程序員在編寫應用程序時產生一種奇怪的感覺。我們想更進一步,嘗試消除樣板代碼,並提供一個類似python的補充API。

  • 工具庫,爲uic和rcc提供一組單獨的工具庫毫無意義,因爲我們需要跟蹤官方工具中的所有更改,並將它們移植到我們的新版本中。將Python集成到官方工具中似乎更好。希望從PySide2 5.14開始,我們能夠直接使用Qt的uic和rcc,而不是python包裝器。

  • Meta Widgets和實用小工具,爲了支持快速開發,我們正在嘗試編寫一組實用小工具和widgets,這將使Python開發人員的工作更容易。與NumPy、Panda等模塊的開箱即用集成也在我們的優先開發計劃中。

  • Shiboken,適應Qt6將包含的所有新特性將是我們的主要關注點。幸運的是,我們得到了很多bug的提交修復和新特性的貢獻者。因此獲得一個更加成熟的Shiboken版本只是時間問題。


您可以通過JIRA (https://bugreports.qt.io/browse/PYSIDE-904, PYSIDE- 904) 列表讀到更多的完整信息,我們期望在Qt 6中可用(我們承諾將盡最大的努力去實現☺)。

 

 

我們非常感謝Qt for Python社區所做的一切。我們目前正在開發的大部分功能都來自於它們。考慮到這一點,我們希望您在我們的IRC頻道#qt-pyside上交流您的關注點和想法。分享你的想法,讓我們一起使Qt for Python變得更好。

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