News

Discover more

使用(yòng)PySide2開發GUI


1.背景

關于QT與PyQt關系

Qt 是一個(gè)跨平台的(de) C++圖形用(yòng)戶界面庫,由挪威 TrollTech 公司于1995年底出品。

Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的(de)那批程序員(yuán) 就已經開始設計 Qt 了(le),Qt 的(de)第一個(gè)商業版本于 1995 年推出。

2008年1月(yuè)31日,諾基亞Nokia公司宣布通(tōng)過公開競購(gòu)的(de)方式收購(gòu)TrollTech公司,旗下(xià)包括Qt在内的(de)技術都歸入Nokia旗下(xià)。并且Nokia針對(duì)自己的(de)移動設備平台規劃的(de)需要,将Qt按不同的(de)版本發行。

Qt商業版:提供給商業軟件開發。它們提供傳統商業軟件發行版并且提供在協議(yì)有效期内的(de)免費升級和(hé)技術支持服務。

Qt開源版:提供了(le)和(hé)商業版本同樣的(de)功能。它是免費的(de),使用(yòng)開源版需要了(le)解其采用(yòng)的(de)各種開源協議(yì)。

例如使用(yòng)開源版QT需要注意的(de)是,QT開源版的(de)LGPL開源協議(yì):

LGPL允許商業軟件通(tōng)過類庫引用(yòng)(link)方式使用(yòng)LGPL類庫而不需要開源商業軟件的(de)代碼。這(zhè)使得(de)采用(yòng)LGPL協議(yì)的(de)開源代碼可(kě)以被商業軟件作爲類庫引用(yòng)并發布和(hé)銷售。即: 使用(yòng) 采用(yòng)LGPL開源協議(yì)的(de)開源版QT,也(yě)可(kě)以用(yòng)來(lái)開發商業、閉源軟件。

2009年3月(yuè)發布的(de)Qt 4.5 起,諾基亞Nokia爲Qt增添開源LGPL授權選擇。

2009年5月(yuè)11日起,諾基亞Qt Software 宣布Qt源代碼庫面向公衆開放,Qt 開發人(rén)員(yuán)可(kě)通(tōng)過爲 Qt 以及與 Qt 相關的(de)項目貢獻代碼、翻譯、示例以及其他(tā)内容,協助引導和(hé)塑造 Qt未來(lái)的(de)發展。爲了(le)便于這(zhè)些内容的(de)管理(lǐ),Qt Software 啓用(yòng)了(le)基于Git 和(hé) Gitorious 開源項目的(de)Web 源代碼管理(lǐ)系統 。

Qt專業版和(hé)企業版是Qt的(de)商業版本。如果你購(gòu)買了(le)這(zhè)些商業版本,你也(yě)可(kě)以獲得(de)技術支持和(hé)升級服務。

2013年7月(yuè)3日,Qt 5.1 正式版發布了(le),這(zhè)是 Qt 5.0 發布後經過 6 個(gè)月(yuè)的(de)開發而測試的(de)新版本。主要是修複 5.0 中的(de) bug,但該版本還(hái)包含了(le)很多(duō)新特性和(hé)一些小改進,詳細内容請看 Qt 5.1 launch page。

2019年7月(yuè),Qt 5.13版本發布,Qt Creator beta版也(yě)更新到了(le) 4.10.0。

(--以上引用(yòng)baike.baidu.com/item/QT

PyQtPython語言的(de)GUI編程解決方案之一。可(kě)以用(yòng)來(lái)代替Python内置的(de)Tkinter。其它替代者還(hái)有PyGTKwxPython等。與Qt一樣,PyQt是一個(gè)自由軟件。PyQt是PyKDE的(de)基礎。

PyQt的(de)開發者是英國的(de)“Riverbank Computing”公司。與4.5版本之前的(de)Qt一樣,它提供了(le)GPL與商業協議(yì)兩種授權方式,因此它可(kě)以免費地用(yòng)于自由軟件的(de)開發。不過目前尚不提供LGPL授權方式。PyQt可(kě)以運行于Microsoft WindowsMac OS XLinux以及Unix的(de)多(duō)數變種上。

2009年8月(yuè),Qt的(de)開發公司諾基亞發布PySide,提供與PyQt類似的(de)功能,但提供了(le)LGPL授權。主要原因是“Riverbank Computing”不願以LGPL授權發布PyQt。[2]

自4.5版本以後[3],PyQt同時(shí)支持Python 2.x與Python 3.x。但是在API方面有所區(qū)别,最主要的(de)是運行在Python 3.x下(xià)的(de)PyQt不使用(yòng)QString,而是str。另外,之前爲了(le)避開Python 2.x關鍵詞限制的(de)exec_()print_()兩個(gè)函數現在重新命名爲exec()print()

(--以上引用(yòng)baike.baidu.com/item/QT

關于Riverbank Computing公司,riverbankcomputing.com/

如果您需要使用(yòng)PyQt進行商業GUI開發,您需要購(gòu)買PyQt license,如下(xià)操作:

購(gòu)買界面如下(xià):

Buy PyQt

The cost of a commercial PyQt license for a single developer is $550 (USD) £420 (GBP) €450 (EUR) . You may pay in either US Dollars, GBP or Euros.

PyQt does not include Qt itself. You must also obtain an appropriately licensed copy (either the commercial version from The Qt Company or the LGPL version from the Qt Project).

即還(hái)需要獲得(de)Qt license(Qt公司的(de)商用(yòng)版本或者LGPL版本) 

A PyQt license covers all of Riverbank's commercial products. We do not sell these products individually.

(--以上引用(yòng)riverbankcomputing.com/

PySide的(de)推出比pyQt晚很多(duō),但也(yě)有些年頭了(le)。由于先前PySide項目不是很完善,又缺乏文檔,所以其存在感不高(gāo)。

Pyside的(de)誕生主要是Nokia(收購(gòu)了(le)Trolltech的(de)Nokia當時(shí)是Qt的(de)爸(bà)爸(bà))與Riverbank Computing談崩了(le)的(de)結果。

Riverbank Computing是pyQt的(de)開發商,對(duì)pyQt采用(yòng)GPLv3協議(yì)。Nokia主動與Riverbank Computing展開了(le)多(duō)輪協商,表示希望pyQt能添加對(duì)LGPL協議(yì)的(de)支持,這(zhè)樣對(duì)于很多(duō)商業用(yòng)戶會更友好,何況你在pyQt裏使用(yòng)的(de)也(yě)是我們LGPL協議(yì)版本的(de)Qt,這(zhè)個(gè)要求不過分(fēn)吧。

Riverbank Computing說我覺得(de)不行。

大(dà)概是覺得(de)Riverbank Computing吃(chī)相難看,Nokia一氣之下(xià)決定單幹,于2009年8月(yuè)發布了(le)支持了(le)LGPL協議(yì)的(de)PySide,pyQt的(de)對(duì)标産品。

然鵝,就算(suàn)你是親生的(de),剛生下(xià)來(lái)也(yě)打不過一個(gè)壯小夥子,何況你馬上就要被過繼出去了(le)。。(滑稽)

2011年,Nokia将Qt的(de)商業許可(kě)賣給Digia。

2012年,Nokia将Qt完全賣給Digia,後者在2012年年底推出了(le)Qt5。

遭遇人(rén)生的(de)重大(dà)變故,PySide項目未來(lái)如何發展還(hái)是個(gè)未知數,更不要說支持Qt5了(le)。反觀pyQt,在Qt5推出的(de)半年内(2013年6月(yuè))就發布了(le)支持Qt5的(de)pyQt5。

一邊是生死未蔔的(de)隻支持Qt4還(hái)不完善的(de)主要依靠社區(qū)維護的(de)PySide,一邊是全面支持Qt4/Qt5的(de)文檔健全的(de)pyQt,強弱懸殊,高(gāo)下(xià)立判。

好在Digia收購(gòu)了(le)Qt後,決定大(dà)力度支持Qt全方位發展,并于2014年9月(yuè)将Qt分(fēn)拆成一家獨立全資子公司The Qt Company,後者于2016年在納茲達克赫爾辛基上市。

PySide對(duì)Qt5提供支持的(de)計劃也(yě)從2014年開始籌備,也(yě)就是2015年上馬的(de)Qt for Python項目,該項目開發的(de)模塊命名爲PySide2,以表示與老一代PySide的(de)不同。

雖說加大(dà)了(le)投入,該補的(de)課也(yě)繞不開,PySide2在Qt公司和(hé)Qt社區(qū)開發者的(de)共同努力下(xià),也(yě)隻在2018年6月(yuè)才正式發布了(le)第一個(gè)版本,穩定性還(hái)是個(gè)問題。不過從0到1是最難的(de),後面就容易了(le),尤其最近發布的(de)Qt 5.12 LTS釋放了(le)非常積極的(de)信号,PySide2已經日趨完善,又是親生的(de),還(hái)有LGPL開源協議(yì)的(de)加持,今後PySide2有足夠的(de)理(lǐ)由成爲Python開發者使用(yòng)Qt的(de)第一選擇。

談談使用(yòng)體驗。

今年一個(gè)項目需要在Python中使用(yòng)Qt,由于協議(yì)的(de)限制,選擇了(le)PySide,後續PySide2發布後又換成了(le)PySide2。整個(gè)過程無縫無痛,代碼兼容性很好,基本隻是Qt4到Qt5風格不同的(de)地方需要改一下(xià)。

當時(shí)比較早,用(yòng)的(de)還(hái)是conda上的(de)PySide2預發布版本,充當了(le)小白鼠。代碼中檢驗了(le)qtDesigner繪制的(de)ui轉py,各類widgets,信号槽,繼承線程類,與Python原生的(de)線程、進程類配合,Pyinstaller打包等操作,沒有遇到任何問題,應該說還(hái)是很穩定的(de)。

界面設計中用(yòng)到了(le)一些pyQt載入stylesheet的(de)代碼,基本上把import裏的(de)pyQt5改成PySide2就行,說明(míng)兩者的(de)兼容性也(yě)很好,部分(fēn)不同的(de)地方Qt for Python項目官網也(yě)列出來(lái)了(le),對(duì)照(zhào)著(zhe)改一下(xià)即可(kě)。

先前回答(dá)中由于開源協議(yì)的(de)問題,曾推薦非商用(yòng)使用(yòng)pyQt,商用(yòng)使用(yòng)PySide/PySide2。現在得(de)改一下(xià)了(le),能用(yòng)PySide/PySide2爲何不用(yòng)呢(ne)。

(--以上引用(yòng)zhihu.com/question/3067

2.使用(yòng)QT Designer 設計GUI

你需要安裝PySide2,可(kě)以通(tōng)過pip在線安裝,筆者使用(yòng)了(le)下(xià)載whl文件進行安裝,如下(xià)圖:

筆者,win10下(xià)使用(yòng)Anaconda3創建了(le)虛拟環境pyside2,并 pip install PySide2-5.13.0-5.13.0-cp35.cp36.cp37-none-win_amd64.whl

筆者,虛拟環境的(de)路徑如下(xià):D:\class1_application\Anaconda3\installer\envs\pyside2

安裝完畢,在D:\class1_application\Anaconda3\installer\envs\pyside2\Lib\site-packages\PySide2文件下(xià)能找到designer.exe可(kě)執行文件。将其創建桌面快(kuài)捷方式,以後可(kě)以在桌面通(tōng)過雙擊啓動QT Designer;

打開QT Designer啓動界面如下(xià):

相關的(de)使用(yòng)教程,略。

3.使用(yòng)pyside-uic 把 .ui 文件轉爲 .py 文件

使用(yòng)QT Designer設計完的(de)文件将保存爲後綴爲ui的(de)文件,你可(kě)以通(tōng)過在安裝了(le)Pyside2虛拟環境“pyside2”中通(tōng)過命令pyside2-uic -o 1.py package.ui将ui文件轉成py文件,如下(xià)圖在終端通(tōng)過命令行将D:\class7_currently\test_exe\package.ui轉成1.py文件:

轉完py文件,如下(xià)圖,新增一個(gè)1.py文件:

注意,pyside2-uic.exe存在虛拟環境“pyside2”文件夾的(de)Scripts,即 D:\class1_application\Anaconda3\installer\envs\pyside2\Scripts下(xià),可(kě)以看到有pyside2-uic.exe。

您可(kě)以通(tōng)過終端,輸入:

D:\class1_application\Anaconda3\installer\envs\pyside2\Scripts\pyside2-uic.exe -o D:\class7_currently\test_exe\1.py D:\class7_currently\test_exe\package.ui

如下(xià)圖:

4.使用(yòng)運行py文件

打開py文件,在文件的(de)末尾增加以下(xià)代碼,即可(kě):

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

如下(xià)圖:


相關文章(zhāng)

上拉電阻和(hé)下(xià)拉電阻

上拉電阻和(hé)下(xià)拉電阻

在折騰Arduino或者樹莓派信号輸入的(de)時(shí)候,時(shí)常聽(tīng)到的(de)就是上拉電阻和(hé)下(xià)拉電阻,

查看全文

牛逼的(de)樹莓派dashboard

樹莓派安裝 Nginx + PHP7.3 + Pi Dashboard

查看全文

Linux 下(xià)使用(yòng) system

下(xià)面的(de)教程将介紹如何将命令或程序配置爲開機啓動時(shí)自動運行的(de)服務。完成配置之後,就

查看全文