2020年10月20日 星期二

在 Python 中使用 Qt

在 Python 中使用 Qt

前言

  Qt 不只提供 C++ 使用,也提供 Python 來使用,不過使用需要一些前置作業,在此把學習的過程做個紀錄。


內容

  在 Python 裡使用 Qt 必須先安裝 Qt 相關套件,這些套件會安裝在 Python 的套件管理,透過以下命令來安裝

pip3 install PyQt5
pip3 install pyqt5-tools


pip3 是 Python 自帶的套件管理,在 Windows 時並不能直接執行,這個命令會在"(安裝目錄)/Scripts",安裝完後到 [ GitLab ] HelloQt 下載範例,這次應用的專案路徑

(HelloQt' directory)/PyQt/Basic ,這次的專案檔的附檔名為".pyproject",和 C++ 的".pro"不一樣。
如果要自己創建一個專案的話請依下圖操作
創建專案的操作


接著為專案命名,如下圖
專案的命名


這裡取好專案名後就下一步到下一步驟
設定預設專案的類別

這裡需要設定設定預設專案的名稱,這個名稱會關係到專案檔的名稱,這個預設的類別會用不到,所以不用在乎類別的名稱,要在乎只有專案名稱,接著到下一步驟
完成創建專案精靈

在完成專案後需要在創建一個名為"MainWindow"的類別,創建的步驟如下
創建類別精靈


依上圖操作後到下一步
設定類別名稱與相關設定

步驟2選擇"PyQt5",繼承類別選擇"QMainWindow",接著到下一步驟
完成創建類別精靈

在創建完類別後還要在創建一個".ui"的設計檔,有這個設計檔可以在 Qt Creator 裡直接編輯 UI,就像 C++ 使用 Qt 一樣,操作如下
創建設計檔的精靈

操作完到下一步
選擇設計檔的樣本

選擇"MainWindow"後就到下一步
設定設計檔的名稱

命好設計檔檔名後到下一步
完成新增設計檔精靈


完成後在專案的狀況如下
完成上述的新增後專案的狀況

 
雙擊畫面的"mainwindow.ui"可以直接到設計介面修改設計,範例的設計如下
範例的設計

範例只新增一個 PushButton ,接著看到"mainwindow.py",程式碼如下
# This Python file uses the following encoding: utf-8
from PyQt5 import QtCore , QtWidgets , uic
from PyQt5.QtCore import pyqtSlot , qDebug

class MainWindow( QtWidgets.QMainWindow ):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        super().__init__()
        uic.loadUi("mainwindow.ui", self)
        #BindEvent
        self.pushButton.clicked.connect( self.onPushButtonClicked )
    @pyqtSlot()
    def onPushButtonClicked(self):
        qDebug( 'Hello' )

在建構式裡會透過"uic.load()"來讀取設計檔,接著透過"connect()"來綁定事件,在要綁定的 Function 前要加"@pyqtSlot()",這個地方跟 C++ 的格式很像,事件的內容就單純列應偵錯訊息,接著看到"pyqt_basic.py",程式碼如下
# This Python file uses the following encoding: utf-8
import sys
from PyQt5 import QtWidgets
from MainWindow import MainWindow
#Follow code add by wizard,but it will not used
#class PyQt_Basic:
#    def __init__(self):
#        pass  # call __init__(self) of the custom base class here

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    #Follow code add by wizard,but it will not used
    # window = PyQt_Basic()
    ## window.show()
    #
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())

開頭有個類別"PyQt_Basic",這是由精靈產生的類別,但由於用不到救註解掉。在主程式的開頭有精靈產生程式碼,由於用不到一樣註解掉,接著將"MainWindow"建出來,並喚起"show()"來顯示即可。

沒有留言:

張貼留言