初探Python GUI——pyqt
前言
從接觸計算機以來,我一直對編寫GUI程序有着一種難以言說的感情,從剛開始的易語言,后來用java,再后來了解到electron,雖然沒有做出像樣的gui軟件,但我還是喜歡gui,也說不出來為什么,前幾天,在一種機緣巧合之下,了解到pyqt,雖然很早就知道QT,Qt庫是目前最強大的庫之一,很多智能設備就是用qt開發的應用界面,用它可以開發出特別炫酷的交互界面,而且很多大型的3D軟件就是用它開發的,由於對C++不是特別熟悉(其實就是沒學過😂),所以也沒有用過,但一直有一種在搞事的邊緣試探,直到了解了pyqt,我突然覺得GUI又可以搞起來了。
簡介
pyqt是QT基於python平台的一種解決方案,python大家應該都了解,特點是構建應用比較快速,開發效率高。百度百科給出的解釋是:
PyQt是一個創建GUI應用程序的工具包。它是Python編程語言和Qt庫的成功融合。Qt庫是目前最強大的庫之一。PyQt是由Phil Thompson 開發。
PyQt實現了一個Python模塊集。它有超過300類,將近6000個函數和方法。它是一個多平台的工具包,可以運行在所有主要操作系統上,包括UNIX,Windows和Mac。 PyQt采用雙許可證,開發人員可以選擇GPL和商業許可。在此之前,GPL的版本只能用在Unix上,從PyQt的版本4開始,GPL許可證可用於所有支持的平台。
優勢
pyqt也有很多優勢,首先它有基於GPL許可證的開源版本,從PyQt的版本4開始,GPL許可證可用於所有支持的平台;另一個優勢是,由於基於python,入門相對簡單,而且再加上pyqt提供了圖形化的設計界面,我們可以在設計器設計好界面,然后轉換成python代碼,簡直不要太爽。
環境搭建
安裝python
先去python官網下載最新安裝包,這里我選擇的是安裝包,當然你也可以選擇壓縮版,下載完直接解壓也行。區別就是壓縮版需要手動配置環境變量。
配置環境變量
這是我本地的安裝目錄和環境變量配置,一般安裝版會自動設置,如果沒有,可以參照設置
配置完后,需要測試下看我們的環境變量設置是否正確,在任意目錄打開cmd命令窗口,輸入如下命令:
python --version
如果顯示類似如下,那基本上你的環境就ok了:
安裝pip
pip就是個包管理工具,我們可以通過它管理我們的python模塊,安裝很簡單,我們選擇在線安裝,在cmd命令窗口中執行如下命令:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
這行命令的作用就是下載pip,由於網絡原因,下載可能比較慢,耐心等待就好,如果網絡問題下載失敗,多試幾次,如果還不行,可以通過下面的網址去官網下載:
https://pypi.org/project/pip/
下載完成后,我們通過如下命令進行安裝:
python get-pip.py
沒有錯誤提示,基本上都可以安裝成功,然后我們測試下看是否安裝成功:
pip --version
如果如下結果,那安裝就ok了
更改pip源
因為pip官方源國內訪問比較慢,安裝組件超級慢,經常出現失敗情況,所以我們要配置國內的鏡像源。目前國內的鏡像站如下:
(1)阿里雲 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣http://pypi.douban.com/simple/
(3)清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/
(5)華中科技大學http://pypi.hustunique.com/
首先進入當前用戶的用戶目錄,一般就是,c盤Users下找到你用戶名對應的文件夾,比如C:\Users\test\
,然后創建一個名為pip
的文件夾,在文件夾下創建pip.ini
文件,windows下要記得先讓自己的文件拓展名可見,最后再添加如下內容:
[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
這里我用的是豆瓣的,你也可以改成阿里的鏡像地址
安裝pyqt5
通過如下命令安裝pyqt5,你會發現替換了源之后的pip,下載速度特別給力:
pip install pyqt5
緊接着,我們安裝pyqt5的組件,里面包含設計器
pip install pyqt5-tools
這里我推薦上面這種安裝方式,不存在兼容性問題,如果通過離線安裝的方式,很可能不兼容。
測試pyqt5
我們先創建個小腳本試一下:
from PyQt5 import QtWidgets, QtGui
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget();
window.show()
sys.exit(app.exec_())
運行上面的腳本,如果有如下窗口彈出,那么恭喜你,pyqt5環境已經就位
下來,我們用pycharm來創建項目,做一些簡單配置
創建項目
打開pycharm,首先要簡單配置下pyqt,然后創建我們的項目。
配置pyqt5
首先打開工具,在External Tools
中增加pyqt的兩個工具,一個是qtDesigner
,也就是我們說的設計器,另一個就是把qt的ui轉成py腳本的。
我們先看qtDesginer
:
參照圖片配置即可,需要注意的是pyqt5設計器的路徑,很多博客說的是python
安裝目錄下的Lib\site-packages\pyqt5_tools\Qt\bin
,但我在實際使用的時候發現並不是,當然更多的原因可能是版本不一樣,我這里是pyqt5
,上面的配置信息如下:
Program: D:\software\python\python38\Scripts\pyqt5designer.exe
Working directory: $ProjectFileDir$
再下來就是ui轉py腳本的工具配置:
這里的program
配置的是python.exe
,也就是在你的python
安裝目錄bin
下,其他參數如下:
Argument: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$
創建項目
上面這些配置完成,就可以開始我們的項目了。首先創建一個項目,填寫項目相關信息
這里需要注意的是,要勾選上圖兩項,保證pyqt的包可以正常導入
設計ui
項目右鍵,選擇External Tools下我們剛剛配置的共,打開設計器
然后我們的設計器就啟動了,它是這個樣子的:
左側側是組件區,包括常用的各類組件,中間是設計核心區,右側就是屬性顯示,我們先創建個主窗口,然后什么都不做,然后輸入文件名保存。
ui轉為py
如果配置沒有問題,我們的ui文件默認是在我們項目根目錄的,我們直接選中要轉換的ui,右鍵選擇我們配置好的轉換工具。
不出意外,我們會發現項目根目錄多了一個和UI同名的py
文件,但是這個文件並不能直接執行,我們先看下文件內部吧:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(290, 140, 121, 51))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "確定"))
然后我們創建一個新的腳本,來啟動這個窗口:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import mainWindow
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = mainWindow.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
如果你的窗口類名和我的不一致,把上面的腳本改成和你的對應的,然后雙擊運行,一個新的窗口出來了:
因為我這里的示例加了一個按鈕,所以他可能和你的不一樣,不過沒關系,能正常運行就好。
到這里,我們本次的內容就結束了,我們在這里總結下。
總結
今天我們主要探討了如何使用pyqt開發一個gui應用,我們從python安裝,環境變量配置,到pyqt5的安裝、配置,以及pycharm集成pyqt5,詳細演示了一個pyqt GUI應用的設計開發過程,雖然代碼不太多,有用的內容也沒多少,但還是希望有幫到你,哪怕是給了你學習python的動力,或者讓你發現了編程的樂趣,那也是值得的。當然,對我來說,能夠將我所了解和知道的和你分享,解決你的問題,這就很有趣……