找 了不少Python GUI工具集,仍是以爲PyQt比較理想,功能強大跨平臺,還支持界面設計器。花一天時間折騰了Ubuntu14.04(32位)+ Python3.4 + Qt5.4.0 + PyQt5.4 + Eric6.0 的完整開發平臺的搭建,各類出錯差點放棄了,好在終於一一解決了,記錄下來之後搭建起來方便點。 html
Ubuntu14.04貌似默認安裝了Python2.7 和Python3.4。故Python3.4的安裝可略去。python
Ubuntu14.04自帶Qt4的部分庫文件,可是咱們的平臺要求Qt5,因此首先安裝Qt5.linux
下載到的若是是Qt5的在線安裝程序,爲其賦予可執行權限便可單擊啓動。因爲我以前文件都安裝在/opt目錄下,故這裏以root身份安裝:shell
sudo chmod a+x qt-opensource-linux-x86-1.6.0-5-online.run sudo ./qt-opensource-linux-x86-1.6.0-5-online.run
啓動界面後默認安裝便可。小程序
安裝完成後配置一下PATH,在當前用戶主目錄下的.bashrc (or .zshrc)文件中加入。api
運行:
bash
sudo gedit ~/.bashrc
加入下面幾行在靠前的位置:app
#找到QT的系統安裝目錄,把QTDIR改過去!!! export QTDIR=/opt/Qt5.4.0/5.4/gcc_64/ #If Using Online Install,as follow: #export QTDIR=/home/UserName/Qt/5.4/gcc_64/ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib export PATH=${QTDIR}/bin:${PATH} #To run pyuic5. export PYTHONPATH=/usr/lib/python3.4/site-packages:$PYTHONPATH
注意${QTDIR}/bin和${PATH}的順序!由於Ubuntu14.04默認${PATH}路徑中的/usr/bin下存在諸多qt命令(確切 的說是指向qtchooser的軟鏈接,qtchooser最終會選擇系統自帶的Qt4命令:可是這些命令默認都不存在),若是${QTDIR}/bin 在${PATH}以後,會致使Qt命令失效。編輯器
特別是qmake命令,在後續安裝中須要用到,保險起見,在終端輸入qmake,若是顯示qmake命令不存在,請經過建立軟鏈接進行解決:ide
將/usr/bin下的qmake軟鏈接到/opt/Qt/5.3/gcc/bin/qmake上,或者將/usr/lib/i386-linux-gnu/qt4/bin/qmake軟鏈接到/opt/Qt/5.3/gcc/bin/qmake上:
sudo ln -s /opt/Qt5.4.0/5.4/gcc_64/bin/qmake /usr/bin/qmake #or #sudo ln -s /opt/Qt5.4.0/5.4/gcc/bin/qmake /usr/lib/i386-linux-gnu/qt4/bin/qmake
此時再輸入qmake查看是否設置成功。
SIP 是python調用C/C++庫的必備模塊。所以SIP是PyQt的依賴工具,安裝PyQt以前必須先安裝對應版本的SIP。PyQt編譯時使用的SIP 版本必須與python默認調用的SIP保持一致!不然python中是沒法調用PyQt的。這裏咱們使用最新的SIP 4.16.3.
Ubuntu14.04中貌似是自帶4.15版的SIP(or 本身安裝python擴展是自動安裝的)。終端輸入:
sip -V
查看已安裝SIP版本,若是存在其餘版本,請查看python3的dist-packages目錄下是否存在sip相關文件。若是存在將其刪除:
sudo -rm /usr/lib/python3/dist-packages/sip*
而後正式安裝SIP 4.16.6。
tar -zxvf sip-4.16.6.tar.gz cd sip-4.16.6 python3 configure.py sudo make sudo make install
SIP無需配置,只是須要安裝完成後注意覈對一下版本:
分別在終端輸入:
sip -V
在python3環境輸入:
>>>import sip >>>print(sip.SIP_VERSION_STR)
查 看兩者顯示的版本是否一致。如不一致,須要從新執行上述刪除過程和安裝過程。版本不一致將意味着後面編譯PyQt所使用的SIP和Python3調用的 SIP的不一致,致使在Python3中調用PyQt的相關模塊(from PyQt5 import QtCore)出現相似以下錯誤:
the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1
PyQt 是Python的一個跨平臺圖形開發工具集,是Python與Qt的成功融合。PyQt包含了大約440個類、超過6000個的函數和方法,灰常強大。需 要注意的是,Eric(一種Python IDE,依賴PyQt)當前最新的穩定版Eric5只支持PyQt4(確切的說是PyQt4.8以上5.0如下),支持PyQt5的Eric版本如今僅爲 Eric6.0 snapshot版,該版本包含最新的Eric5的全部功能,但穩定性須要測試。若是你但願使用穩定的Eric5,請在此步驟安裝 PyQt4的最新版PyQt4.11.2。這裏咱們安裝PyQt5.3.2.
tar -zxvf PyQt-gpl-5.4.tar.gz cd PyQt-gpl-5.4 python3 configure.py
注 意:此命令生成各類Qt模塊後,其中的QtWebKitWidgets模塊因爲Qt4和Qt5的qprinter.h所屬模塊的調整(Qt4存在於 QtGui中,Qt5將其調整到QtPrintSupport中了),QtWebKitWidgets的Makefile中缺失了對 QtPrintSupport的頭文件目錄引用,會致使後面編譯PyQt5時沒法找到qprinter.h頭文件,編譯失敗(編譯過程很是漫長):
qprinter.h: No such file or directory
因此須要向剛生成的QtWebKitWidgets模塊源文件的MakeFile文件的INCPATH中添加QtPrintSupport引用。
原INCPATH爲:
INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.
修改成:
INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtPrintSupport -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.
或者能夠直接在QtWebKitWidgets模塊源文件的QtWebKitWidgets.pro文件中加入:
QT += printsupport
也行。
接下來執行編譯安裝:
sudo make sudo make install
安裝完成後進入Python3環境驗證是否安裝成功:
>>>import PyQt5
若是提示不存在PyQt5模塊,表示安裝的PyQt5沒有被python3正確識別。默認的安裝路徑爲python的site-packages目錄。一般 python3的模塊安裝路徑會分紅2個,一個/usr/lib/python3,一個/usr/lib/python3.4,兩個路徑下的模塊都能被 python3環境正確調用,可是python3.4的site-packages目錄下的模塊貌似沒法調用。PyQt5恰恰默認安裝到此目錄了。解決辦 法是爲其建立軟鏈接,保險起見,python3目錄和python3.4目錄分別建立一個:
sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3.4/PyQt5 sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3/dist-packages/PyQt5
可能不一樣的計算機上可識別的模塊安裝目錄會存在差別,可是解決原理都差很少,在python3可識別模塊的路徑下建立PyQt5的軟鏈接便可讓Python3成功識別。
另一個解決辦法是在python3 configure.py 時就指定安裝目錄。如:
python3 configure.py --destdir /usr/lib/python3.4
QScintilla2是鏈接編譯器和Python的接口,所以是Eric的必需前置組件。QScintilla2 中須要單獨安裝3個模塊:本體,Designer和python bingdings。
tar -xzvf QScintilla-gpl-2.8.4.tar.gz cd QScintilla-gpl-2.8.4
A.安裝本體:
cd Qt4Qt5 qmake qscintilla.pro sudo make make install
B.安裝Designer:
cd ../designer-Qt4Qt5 qmake designer.pro sudo make sudo make install
C.安裝Python bingdings:
cd ../Python python3 configure.py --pyqt=PyQt5 sudo make sudo make install
以上步驟便可正確安裝QScintilla2。須要注意的是Python bingdings安裝時須要指定 --pyqt=PyQt5參數,不然默認是爲PyQt4安裝。或者直接修改其configure.py,將 pyqt5_is_default = False改成pyqt5_is_default = True也可。
無需額外配置。
Eric 做爲一款強大的開源Python IDE,支持Qt界面設計器的Eric在Python GUI開發中更是數一數二,Python+PyQt+Eric已經成爲一種標準的Python GUI開發平臺。其中Eric4支持Python2.6+與PyQt4.6+組合,Eric5支持Python3.0+與PyQt4.8+組 合,Eric6支持Python3.0+與PyQt5.0+組合。目前Eric5.4.7爲最新穩定版。Eric6.0爲snapshot版。上文已有介 紹。具體搭配可參考:http://eric-ide.python-projects.org/eric-download.html。這裏安裝 Eric6.0.
下載其中的eric6-6.0-snapshot-20140720.tar.gz主文件和eric6-i18n-zh_CN.GB2312-6.0-snapshot-20140720.tar.gz中文語言包。
tar -zxvf eric6-6.0-snapshot-20140720.tar.gz tar -zxvf eric6-i18n-zh_CN.GB2312-6.0-snapshot-20140720.tar.gz //語言包文件會自動解壓到Eric6.0主文件解壓目錄中。沒有的話手動複製。 cd eric6-6.0-snapshot-20140720 sudo python3 install.py //安裝主程序 sudo python3 install-i18n.py //安裝中文語言包
應該可以順利安裝完成。
須要注意,因爲是以root身份安裝(sudo),因此運行時須要執行:
sudo eric6
纔不會致使Eric運行或者關閉時寫入配置文件出錯(sudo安裝的Eric6的文件都是root全部,其餘用戶執行Eric6寫入配置文件時權限不足)。爲了保證直接執行:
eric6
時不致出錯,能夠將當前用戶的eric6目錄權限設置爲可讀寫:
sudo chmod a+w -R ~/.eric6 sudo chmod a+w -R ~/.config/Eric6
或者安裝時就直接
python3 install.py python3 install-i18n.py
就無需sudo執行了。可是不推薦這樣作。
終端輸入eric6啓動:
一、選擇Settings -> preference -> Editor -> Autocompation。勾選全部選框;
二、選擇Settings -> preference -> Editor -> QScintilla 。勾上左右的兩個選框,而後在下面source中,選擇from Document and API files;
三、 選擇Settings -> preference -> Editor -> APIs。勾選Complie APIs Autocompation,在Language中,選擇python3。點面下面的Add from installed APIs按鈕,選擇住須要的.api文件。最後點擊Compile APIs;
四、選擇Settings -> preference -> Interface -> Interface。右側Language根據喜愛選擇中文或者English。重啓生效。
配置完成。
提供2個簡單的Demo驗證平臺是否正確搭建。
#!/usr/bin/env python from PyQt5.QtWidgets import (QApplication, QLabel) import sys if __name__ == "__main__": app = QApplication(sys.argv) label = QLabel("<center>Hello World with PyQt5!</center>") label.resize(200, 50) label.show() sys.exit(app.exec_())
此部分轉自:http://www.pythoner.com/89.html
一、新建項目。
點擊【項目】-【新建】,彈出以下的對話框。建立一個名爲demo2的項目。注意,在建立項目時,eric不會自動根據填寫的項目名稱修改項目文件夾名稱!
點擊肯定以後,能夠看到一個源代碼樹中只有__init__.py的項目。另外,eric還建立了幾個文件,可是並不會在這裏顯示出來,他們分別是項目文件」pyqtdemo.e4p」和」_eric4project」文件夾。
二、新建窗體。
將 左側的【源代碼】選項卡切換至【窗體】選項卡(左數第二個)。右鍵空白區域,選擇【新建窗體】。在彈出的對話框中選擇【對話框】。在彈出的文件對話框中, 選擇文件位置,並填寫文件名稱。這裏,咱們將其命名爲demo2.ui。肯定後,就能夠看到【窗體】選項卡中,有一個demo2.ui文件了。
三、設計窗體。
右鍵點擊「pyqtdemo.ui」文件,選擇【在Qt設計師中打開】,就能夠在Qt Designer中設計UI界面了。
從圖中能夠看到,Qt Designer分爲以下幾個部分:
菜單欄:包括文件、編輯、窗體、視圖、設置、窗口和幫助。
工具欄:包括文件操做、部件先後置、編輯窗口部件、編輯信號/槽、編輯夥伴、編輯Tab順序、佈局方式、調整大小等。
部件欄:包括各類可用部件。
窗體設計區域
對象查看器:能夠查看各部件對象關係樹及其所屬的類
屬性編輯器
信號/槽編輯器
動做編輯器
資源編輯器
3.一、修改窗體屬性
默認的窗體屬性中,objectName(部件名稱,其餘程序引用時使用)默認爲Dialog,windowTitle(窗體標題)默認也是Dialog。 咱們能夠根據本身的須要,對對話框的各個屬性進行修改。這裏,我只修改了windowTitle爲「PyQt Demo」,並改變了其大小。
3.二、添加部件
從左側的widget box中拖出3個PushButton,1個label。修改它們的objectName、text等屬性。其中3個PushButton的ObjectName分別爲btn一、btn二、btnClose。
添加後的效果圖,以下圖所示:
四、信號與槽
4.一、概念
在PyQt5中,事件處理的相關術語爲「信號(signal)」和「槽(slot)」。
信號的含義就是咱們常說的事件,好比按鈕被按下、複選框勾選狀態變動、可輸入文本框文本變動等等。
槽的含義則是事件處理函數,好比關閉窗體、隱藏窗體、最大/小化、設置焦點、重繪等。
4.二、使用一個自帶的槽
咱們從工具欄中,選擇【編輯信號/槽】。
拖動要編輯的部件,會出現一個相似於電路中接地符號的標誌,並彈出對話框。
這裏,咱們選擇clicked(),即按鈕被按下,此時看到右側可選的槽並很少,而且沒有咱們但願使用到的關閉功能。
勾選【顯示從QWidget繼承的信號和槽】,這時能夠發現,右側的槽多了不少。在其中找到close(),點擊肯定。此時,點擊【關閉】按鈕執行對話框關閉的功能就已經實現了。
下圖是已經建立了【關閉】按鈕槽以後的窗體設計圖。
4.三、第一次運行
雖然只實現了一個關閉功能,可是仍是讓咱們先來看看如何運行這個到目前爲止一行代碼都沒有寫過的程序吧。
如今回到eric的界面,右鍵「demo2.ui」,選擇【編譯窗體】。
短暫的時間事後,能夠看到編譯成功提示。這時,咱們切換到【源代碼】選項卡,能夠看到一個名爲Ui_demo2.py的文件,這就是根據剛纔那個ui文件自 動編譯而成的,咱們不須要對其進行任何修改,也不該當對其進行任何修改,由於,任何對這種文件,在下次編譯後,以前的修改會所有不存在。
下圖,就是咱們第一次運行時的場景。在eric裏,咱們能夠F2直接運行,或F5進行調試。當按下【關閉】的時候,窗體就會被關閉。
4.四、建立自定義槽
使用自帶槽的方式很簡單,然而,它所能實現的功能也是有限的,在咱們的開發中,絕大多數信號發生時,不會使用默認的槽。所以,這一小節將經過按鈕一、2的實現來介紹如何建立一個自定義槽。
自定義槽,就要求本身寫其中的槽函數,而以前的操做中,咱們尚未動手寫過一次代碼,那麼這個槽的代碼寫在哪裏呢?
咱們再切換回【窗體】選項卡,右鍵demo2.ui,選擇【生成對話框代碼】。
首先,點擊【新建】,新建一個類,在這裏能夠修改類名、文件名和路徑。
而後在下面的選框中,選擇本身須要使用到的信號。好比,個人選擇以下圖所示,是兩個按鈕被按下時的信號:
這時,就生成了一個默認的代碼。對這個代碼進行修改,實現預期的內容。
五、完成
修改以後代碼和運行界面以下: