PyQt5開發(fā)實(shí)踐(一、準(zhǔn)備篇)
前言
近一年來我開發(fā)了不少PyQt小項(xiàng)目,因?yàn)橹皼]用過使用C++語言的Qt,所以可以算是從零基礎(chǔ)開始邊學(xué)邊做的,這個過程中再一次體會到國內(nèi)技術(shù)社區(qū)的匱乏…… 國內(nèi)關(guān)于PyQt的資料說少不少,說多也不多,主要是比較零散,也沒什么比較好用的系統(tǒng)的學(xué)習(xí)資料… 所以這個PyQt,全靠看文檔和國外社區(qū),還有一個最重要的:自己摸索……
開發(fā)環(huán)境搭建
本文的開發(fā)環(huán)境搭建一部分是從書里學(xué)來的,一部分是實(shí)踐中總結(jié)的,總之在目前沒有一種比較好用的PyQt集成開發(fā)工具的情況下,達(dá)到暫時(shí)的比較高效的開發(fā)模式。
目前我用的PyQt開發(fā)方式沿用傳統(tǒng)的MVC架構(gòu),將界面布局和邏輯實(shí)現(xiàn)分開~
具體:
用QtDesigner設(shè)計(jì)好界面,保存為 *.ui文件,然后使用PyQt工具中的pyuic5將ui文件轉(zhuǎn)換為py文件,這個就是view在controller包新建對應(yīng)的py文件,用來實(shí)現(xiàn)界面中的相應(yīng)邏輯
項(xiàng)目結(jié)構(gòu)參考:
使用QtDesigner
這個QtDesigner很簡陋,別說跟VS比,就是跟Android Studio或者是IDEA里的Swing界面設(shè)計(jì)工具比起來,都算是弟弟,大概相當(dāng)于98年的VB6.0六七成水平吧……
不過也聊勝于無,至少能設(shè)計(jì)簡單的界面,就可以了。
由于Flutter、Android App寫多了,我很習(xí)慣用各種線性布局,Qt在布局方面也不賴,有Hlayout和Vlayout可以用,在QtDesigner里使用也很方便:創(chuàng)建一個Main window,然后放幾個控件上去,右鍵設(shè)置布局就好了,然后就可以盡情使用HLayout或者VLayout、GridLayout各類組件來做布局,如圖:

安裝PyQt工具
為了能使用前文提到的諸如QtDesigner、pyuic5工具,需要先安裝。
pip install pyqt5
pip install pyqt5-tools
安裝完之后就可以在Python安裝目錄下的Lib/site-packages下找到PyQt5和pyqt5-tools文件夾,我們要的QtDesigner、pyuic5等工具就在pyqt5-tools文件夾下。
在PyCharm中配置外部工具
為了讓PyCharm可以更方便的做PyQt開發(fā),還得配置幾個外部工具,配置完之后進(jìn)行一些快捷操作:比如右鍵ui文件可以直接使用QtDesigner打開,也可以使用將UI文件轉(zhuǎn)換為py文件,如圖:

具體配置方法如下:
首先,F(xiàn)ile->Settings,打開PyCharm的設(shè)置,選擇到External Tools界面,如圖

這里選擇加號按鈕打開添加頁面,我們先把QtDesigner添加進(jìn)去,如圖

接著添加pyuic5工具,這個工具的命令參數(shù)格式是這樣的:
{pyuic5_path} -o {target_path} {file_path}
所以配置方法是這樣:

參數(shù)部分我再復(fù)制一下:
-o $FileDir$/$FileNameWithoutExtension$.py $FilePath$
推薦一個小開源項(xiàng)目
這是我之前寫的一個簡單的視頻合并工具,下面是簡單項(xiàng)目介紹
想合并視頻,但是卻找不到比較好用的工具,很多都要收費(fèi),我想著「這破功能還得收費(fèi)?」,于是決定自己搞一個,一開始用Python做了一個,效果還不錯,完美完成了我的視頻合并任務(wù),不過沒有圖形界面,想分享給朋友一起用也沒辦法,于是用Qt寫了個圖形界面套上去就有了本項(xiàng)目

地址:https://github.com/Deali-Axy/VideoMerge
推薦一本書
雖說國內(nèi)系統(tǒng)的學(xué)習(xí)資料很少,不過也是讓我找到了這本

忘記在哪找的PDF了,里面是沒有目錄的,查閱起來很費(fèi)勁,我花時(shí)間整本書過了一遍,手動標(biāo)注了目錄,如圖

也算是對整本書的內(nèi)容了解得七七八八吧,前面對搭建PyQt開發(fā)環(huán)境什么的,還是有些幫助的,后面各種組件的介紹就沒那么詳細(xì)了,有些有用的東西書里都沒有涉及到,還是得依靠Google。so,這本書只能說是矮子里挑高個,差強(qiáng)人意吧~
歡迎交流
程序設(shè)計(jì)實(shí)驗(yàn)室專注于互聯(lián)網(wǎng)熱門新技術(shù)探索與團(tuán)隊(duì)敏捷開發(fā)實(shí)踐,在公眾號「程序設(shè)計(jì)實(shí)驗(yàn)室」后臺回復(fù) linux、flutter、c#、netcore、android、kotlin、java、python 等可獲取相關(guān)技術(shù)文章和資料,同時(shí)有任何問題都可以在公眾號后臺留言~
博客園:https://www.cnblogs.com/deali/ 打代碼直播間:https://live.bilibili.com/11883038 知乎:https://www.zhihu.com/people/dealiaxy

