我們知道,Python中有很多GUI庫,這些庫在創建應用程式時都很方便,常用的GUI庫有tkinter、wxPython、PyQt、Kivy、Pyforms、pyGUI等,比較經典的庫有tkinter、wxPython、PyQt。從今天開始,和小夥伴們一起梳理一下關於PyQt創建GUI應用程式的一些知識點和方法。
PyQt簡介
Qt是1991年由Qt Company開發的一個跨平臺C++圖形用戶界面應用程式開發框架。它既可以開發GUI應用程式,也可用於開發非GUI程序,比如控制臺工具和伺服器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,並且允許真正地組件編程。
2008年,Qt Company科技被諾基亞公司收購,Qt也因此成為諾基亞旗下的程式語言工具。
2012年,Qt被Digia收購。2014年4月,跨平臺集成開發環境Qt Creator 3.1.0正式發布,至此實現了全面支持IOS、Android、WF,它提供給應用程式開發者建立藝術級的圖形用戶界面所需的所有功能。
2019年,Qt團隊宣布最新版5.13版本發布。注意,它還在被支持。
PyQt是實現了一個Python模塊集,是一個多平臺的工具包,可以運行在所有主要作業系統上,包括UNIX,Windows和Mac,甚至是Android中。
PyQt採用雙許可證,開發人員可以選擇GPL和商業許可。在此之前,GPL的版本只能用在Unix上,從PyQt的版本4開始,GPL許可證可用於所有支持的平臺。
PyQt模塊包含的內容
PyQt提供了哪些模塊?
PyQt實現了超過300個類庫,包含了將近6000多個函數和方法。可謂是博大精深,這個庫不僅提供了圖形界面的開發,還提供了諸如多線程、網絡、資料庫、圖形渲染等諸多常用功能。比較常用的接口如下:
QtCore模塊包含核心的非GUI功能。該模塊用於時間、文件和目錄、各種數據類型、流、網址、MIME類型、線程或進程。
QtGui模塊包含圖形組件和相關的類,例如按鈕、窗體、狀態欄、工具欄、滾動條、位圖、顏色、字體等。
QtNetwork模塊包含了網絡編程的類,這些類允許編寫TCP/IP和UDP的客戶端和伺服器,他們使網絡編程更簡單,更輕便。
QtXml包含使用XML文件的類,這個模塊提供了SAX和DOM API的實現。
QtSvg模塊提供顯示的SVG文件的類。可縮放矢量圖形(SVG)是一種用於描述二維圖形和圖形應用程式的XML語言。
QtOpenGL模塊使用OpenGL庫渲染3D和2D圖形,該模塊能夠無縫集成Qt的GUI庫和OpenGL庫。
QtSql模塊提供用於資料庫的類。
等等還有很多,這裡就不再一一例舉了。
這麼多模塊,對於GUI編程,我們一般使用PyQt5.Qt中提供的接口。
創建一般GUI應用
具體步驟如下:
# 導入相關模塊
from PyQt5.Qt import *
import sys
# 創建應用程式對象
app = QApplication()
# 創建頂層窗口
window = QWidget()
# 設置窗口屬性
window.setWindowTitle('應用程式名稱')
window.resize(500, 400)
window.move(400, 200)
# 在頂層窗口中放置控制項
label = QLabel(window)
label.setText('這是一個Label控制項')
label.move(200, 100)
# 顯示控制項
window.show()
# 應用程式執行,進入到消息循環,等待事件響應
sys.exit(app.exec_())
簡化輸入
我們知道,如果只是創建一個普通的GUI應用程式,上面的這些代碼夠用了,我們只需要將label控制項換成自己應用程式中的控制項即可。
前面的內容我們知道,PyCharm提供了一個live template功能,它可以使用簡短的字符輸入來替代我們輸入大段代碼內容。因此,我們可以將上述代碼製作成一個模板內容,當我們輸入「qtt」(打個比方,你可以替換成任意你喜歡的內容),讓編譯器自動為我們輸入上面的這些代碼。
以後,每次創建GUI應用程式時,只是修改label控制項的那部分內容即可。
但是,這樣的方法只是簡化了我們的輸入,並沒有更好的封裝我們的代碼。
封裝
同樣的道理,我們可以將下面的代碼裝入到PyCharm中,定義一個live template模板。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle($TITLE$)
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
$CODE$
if __name__ == '__main__':
import sys
application = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(application.exec_())
按照上面的方法,將這個模板命名為qto,每次創建GUI應用程式時,在PyCharm中輸入qto,即可自動為我們輸入這一框架。
我們只需要輸入TITLE變量和我們需要的控制項(CODE),很方便,不是嗎?
好了,今天的內容就到這裡了,喜歡Python編程的小夥伴們關注我,後續會推出一些關於Python的GUI編程的一些小技巧和知識點。
轉載請註明出處,百家號:Python高手養成