用 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 off
call E:\MyEnv\Scripts\activate.bat
start C:\<你的VS Code 路徑>\VSCode\Code.exe
exit

第一行不解釋了,可自行度娘。第二行是用 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 Qt
from 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())

執行此代碼文件,效果如下圖:

 

看到上述窗口,說明 PySide 6 配置無誤。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章