GUI編程:初探Python GUI——pyqt


初探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的動力,或者讓你發現了編程的樂趣,那也是值得的。當然,對我來說,能夠將我所了解和知道的和你分享,解決你的問題,這就很有趣……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM