在 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()"來顯示即可。
沒有留言:
張貼留言