用 VS Code 搞Qt6:使用 PySide 6

一般來說,用C++寫 Qt 應用才是正宗的,不過,為了讓小學生也能體驗 Qt 的開發過程,或者官方為了增加開發者人數,推出了可用 Python 來編程的 Qt 版本 。此版本命名比較奇葩,叫 PySide,與 Qt 6 配套的是 PySide 6 。當前最新版本是 6.3.2 。
PySide 的優勢在于它是官方維護的,完全是C++開發的 。在原有庫基礎上增加了對應的 .pyd 文件,對 API 做了封裝,并由 .pyi 文件進行類型規范 。在性能上是不用擔心的,但是,這種開發方式用來學習較適合,真要做個應用程序 , 還是用C++好,編譯出來就能用了 。Python 寫的話打包要用其他工具,也麻煩,對于腳本語言 , 還得到處帶上個解析器 。
PySide 6 可以通過 pip 直接安裝就行了 。
在安裝之前,老周建議先創建個虛擬環境 。一來專用性強,二來方便打包 。假設我要把虛擬環境存放在神奇的 E 盤下的 MyEnv 目錄下,那么,可以執行:
python -m venv E:\MyEnv或者
python3 -m venv E:\MyEnv虛擬環境可以創建一個隔離的區域,有獨立的 python 解析器、pip 程序等 。每個虛擬環境互不干擾 。在虛所環境的 Scripts 目錄(Linux是 bin 目錄)下,有兩個文件很有用 。要啟用虛擬環境,就執行 activate 文件;要退出虛擬環境,執行 deactivate 文件 。
接下來在剛建立的虛擬環境中安裝 PySide 6 。先執行 activate 文件激活環境 , 然后執行命令:
pip install PySide6如果不能下載或下載特慢,請換國內的清華大學源 。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PySide6詳細的使用方法請自行查看幫助說明,此話題對本文而言已超綱 。
------------------------------------------------------------------------------------------------------------------------------------
接下來該到 VS Code 了 。不需要什么特殊配置,安裝微軟官方的 Python 擴展即可 。
但是,不過,可是,然而,要注意:要先執行虛擬環境中的 activate 文件 , 然后在當前運行環境不變的前提下啟動 VS Code 。在VS Code中也需要使用虛擬環境所設置的環境變量 。為了人性化 , 咱們可以在桌面上建一個批處理文件,然后輸入以下內容:
@echo offcall E:\MyEnv\Scripts\activate.batstart C:\<你的VS Code 路徑>\VSCode\Code.exeexit第一行不解釋了 , 可自行度娘 。第二行是用 CALL 命令調用 activate 文件(在 Windows 上它是個批處理文件),這樣虛擬環境就激活了 。第三行使用 start 命令啟動 VS Code,這樣 VS Code 就具備了虛擬環境的上下文和環境變量了 。第四行退出這個批處理文件 , 這是為了關掉命令行窗口 。此處不必理會 deactivate 文件 , 畢竟 VS Code 退出后,虛擬環境相關的環境變量就沒有了 。
當我們要用 PySide 6 時,直接運行批處理文件就完事了 。
===================================================================================
PySide 6 的各種類型、模塊與 C++ 版本是一樣的 , 只要你會寫 Python 代碼,基本上可以直接遷移 。當然,千萬不要像官方文檔那樣遷移,因為文檔的 Python 代碼估計是通過機器翻譯的,直接將 C++ 譯成 Python 。所以,你會看到官方文檔有很多 Python 代碼是錯的,根本不能運行 。有的連語法都保留了 C++ 特征,壓根就不是 Python 代碼 。
盡管不能直接把 C++ 代碼轉換成 Python 代碼,但是按照 C++ Qt 程序的思路來寫代碼是沒問題的 。由于編程語言差異性,是不可能完全兼容的 。比如,C++ 版中的許多宏,你不能在 Python 中使用 。假如你要從 QObject 類派生,為了使其支持信號和槽 , 要加上 Q_OBJECT 宏 。在 Python 中不需要加,也沒有這個,官方封裝的庫會幫我們完成這個 。再如,C++ 中重載的運算符 <<、>> 也不能用,PySide 中沒有 QDebug 。
在 VS Code 中,解析器選擇咱們上面創建的虛擬環境 。然后新建一個代碼文件,名字隨便取 。寫個簡單程序試試 。
# 導入要用到的類型from PySide6.QtCore import Qtfrom PySide6.QtWidgets import QApplication, QWidget# 自定義類,作為窗口class MyWindow(QWidget):# 構造函數def __init__(self, parent = None):super().__init__(parent, Qt.Window)# 設置窗口標題self.setWindowTitle("智能掏糞機")# 設置窗口大小self.resize(260, 185)#-------------------------------------------------if __name__ == '__main__':# 先實例化 app 對象app = QApplication()# 再實例化窗口類對象win = MyWindow()# 顯示窗口win.show()# 啟動消息循環app.exec()最后啟動應用程序的代碼也可以這樣寫:
if __name__ == '__main__':import sys# 先實例化 app 對象app = QApplication(sys.argv)# 再實例化窗口類對象win = MyWindow()# 顯示窗口win.show()# 啟動消息循環sys.exit(app.exec())

推薦閱讀