Python PySide6 教學Author: Kelvin Huang本教學範例程式碼 [ https://github.com/cgcomtw/Python-PySide6/ ]
PySide6 與 Tkinter 的差異,實務導向的比較說明: 外觀與設計能力TkinterPython 內建、最輕量的 GUI 工具。 元件(Button、Label、Entry、Menu...)外觀偏向「傳統」風格,沒有現代感。 雖然可以客製顏色與字型,但整體視覺受限於系統原生樣式(Windows、macOS 會略有不同)。 適合教育、工具型、原型開發。
PySide6(Qt for Python)使用 Qt6 GUI 框架,支援 QML、Qt Designer、SVG、動畫、特效、Dark Mode、Responsive Layout。 UI 可達到專業軟體水準(如 Blender、Photoshop 的視窗質感)。 有大量現成的 widget、icon、style(Fusion、Material、Windows、macOS Style)。 適合正式發佈的商業應用、播放器、繪圖工具、資料管理器等。 總結 : Tkinter = 實用簡單的「工具感」;PySide6 = 專業現代的「應用程式外觀」。
技術底層與相依性
開發體驗Tkinter編碼簡單直觀,學習曲線低。沒有 UI 設計工具(需手寫介面)。適合用來教學、測試、快速開發。範例: import tkinter as tk
PySide6結構化設計(QMainWindow、QWidget、QLayout、Signal/Slot)。 可用 Qt Designer 視覺化設計 UI,再轉換成 .py。擁有 MVC / OOP 架構,可大幅擴充。範例: from PySide6.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget app = QApplication(sys.argv)
功能擴充
Tkinter 是輕便、簡單、快速上手 的 GUI / PySide6 是強大、現代、專業級的 GUI 若您想讓應用程式的外觀是主流設計風格,前期用 Tkinter 打 prototype ,後期用 PySide6 製作操作介面。
以下範例使用 PySide6 製作操作介面,應用程式的預設視窗大小為 888 * 500 像素,可縮放視窗大小,按下鍵盤 F11 可切換至全螢幕顯示(且不出現上方的標題列),再按下 F11 可切換回視窗顯示。畫面中央將以白色文字顯示以 時:分:秒:豪秒 格式的計時器,最初是停止狀態,按下空白鍵時開始計時;再按一下空白鍵可暫停,再按一下空白鍵可再計時;如果快速按 2 下空白鍵,計時器將會歸零並停止,準備下一次的開始計時,黑色背景白色文字。 [ pyside6_timer.py ]
補充修改說明: 連按判定時間可以改 DOUBLE_TAP_MS(預設 300ms),視你打字速度調整。 showFullScreen() 會隱藏標題列;再按 F11 用 showNormal() 回復可縮放視窗。 若需要 Esc 退出全螢幕,可在 keyPressEvent 加上 Qt.Key_Escape 時呼叫 showNormal()。 若要改字體的部分 font = QFont("Consolas, Courier New, Noto Sans Mono", 64, QFont.Bold) self.label.setFont(font) 這兩行決定了計時文字的字體名稱、字體大小(這裡是 64 點)、字重(這裡是 QFont.Bold)。 程式最後有一個 resizeEvent 可根據視窗高度自動調整字體大小,若希望字體固定大小,可刪掉或修改這個事件處理的部分。 例如以下說明是把字體固定改成「微軟正黑體」,而且大小不隨視窗縮放。 1. 初始化字體設定 font = QFont("Microsoft JhengHei", 64, QFont.Bold) # 改成微軟正黑體,固定大小 64 self.label.setFont(font)
2. 取消自動隨視窗縮放字體(刪除或註解掉 resizeEvent 裡的內容) # def resizeEvent(self, event): # super().resizeEvent(event) 字體就會固定是「微軟正黑體 64pt」,不會隨著視窗大小改變。
對了!也可以調整成選擇「固定字體大小」或「自動縮放字體」兩種模式,用一個布林變數控制: 只需要修改 設定字體 和 resizeEvent 部分: 1. 初始化字體改成「微軟正黑體」固定大小 font = QFont("Microsoft JhengHei", 64, QFont.Bold) # 改成微軟正黑體,大小固定 64 self.label.setFont(font)
2. 停用自動隨視窗縮放字體 把 resizeEvent 裡的程式碼註解掉或刪除,只保留: def resizeEvent(self, event): super().resizeEvent(event) # 保持原本事件鏈即可 字體就會固定在「微軟正黑體 64pt」,不再隨視窗大小改變。
此外,可以加個布林變數(例如 AUTO_RESIZE_FONT = True/False)來切換「固定」與「自動縮放」模式
[ pyside6_animate_background ]
Copyright © 2025 CG Digital Corp. All rights reserved.
|