👉 项目官网:https://www.python-office.com/ 👈

👉 本开源项目的交流群 👈

github star gitee star atomgit star

AI编程 AI交流群

大家好,这里是程序员晚枫,正在all in AI编程实战,全网同名。

(Tkinter / PyQt5 / PySide6 一次讲透,带图标、高 DPI、暗黑模式)


开场 30 秒
“GUI 程序打包后双击无窗口、图标模糊、Qt 插件缺失?”
本讲 20 分钟,用 3 个完整案例演示“从源码到安装包”的全流程,并给出可复制粘贴的 .spec 模板。


6.0 前置清单(1 min)

工具版本作用
pyinstaller≥ 6.8核心打包
TkinterPython 内置轻量 GUI
PyQt5 / PySide6pip 最新跨平台商业级 UI
Qt-Toolpip install pyqt5-tools生成 .qrc / designer

6.1 Tkinter 单文件打包(5 min)

  1. 示例源码

    1
    2
    3
    4
    5
    6
    # tk_hello.py
    import tkinter as tk
    root = tk.Tk()
    root.title("Hello Tk")
    tk.Label(root, text="打包成功!").pack(padx=40, pady=20)
    root.mainloop()
  2. 一键打包

    1
    pyinstaller --onefile --noconsole --icon=tk.ico tk_hello.py
  3. 高 DPI 不模糊

    1
    2
    3
    4
    5
    6
    # 在 tk_hello.py 顶部加
    try:
    from ctypes import windll
    windll.shcore.SetProcessDpiAwareness(1)
    except:
    pass

6.2 PyQt5 完整工程打包(8 min)

  1. 工程结构

    1
    2
    3
    4
    5
    6
    7
    8
    myqt/
    ├─ main.py
    ├─ ui/
    │ ├─ main.ui
    │ └─ resources.qrc
    ├─ icons/
    │ └─ app.ico
    └─ requirements.txt
  2. 资源编译

    1
    2
    pyrcc5 ui/resources.qrc -o ui/resources_rc.py
    pyuic5 ui/main.ui -o ui/main_window.py
  3. .spec 模板(可直接抄)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # -*- mode: python -*-
    import pathlib
    ROOT = pathlib.Path('.').resolve()

    a = Analysis(
    ['main.py'],
    pathex=[ROOT],
    binaries=[],
    datas=[(ROOT/'icons', 'icons')],
    hiddenimports=['PyQt5.sip', 'PyQt5.QtPrintSupport'],
    excludes=['PyQt5.QtWebEngine'],
    hookspath=[],
    )

    pyz = PYZ(a.pure, a.zipped_data)

    exe = EXE(
    pyz, a.scripts, a.binaries, a.zipfiles, a.datas,
    name='MyQtApp',
    icon=ROOT/'icons/app.ico',
    debug=False,
    console=False, # GUI 无黑框
    upx=True,
    upx_exclude=['Qt5Core.dll', 'Qt5Gui.dll'],
    )

    # onedir 可加 COLLECT;单文件无需
  4. 打包 & 运行

    1
    2
    pyinstaller MyQtApp.spec
    dist/MyQtApp/MyQtApp.exe # 或 .app / 无后缀

6.3 PySide6 暗黑模式与 macOS .app(4 min)

  1. 启用系统暗黑

    1
    2
    3
    # 在 main.py
    from PySide6.QtCore import QCoreApplication, Qt
    QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)

    macOS 上自动跟随系统深浅色。

  2. 生成 .app 结构

    1
    pyinstaller --onedir --name MySideApp --noconsole --icon app.icns main.py

    输出

    1
    2
    dist/MySideApp.app/
    └─ Contents/MacOS/MySideApp

    可用 codesign 签名后再发用户。


6.4 通用避坑清单(2 min)

问题症状解决
Qt 插件缺失启动报 could not find or load the Qt platform plugin确保 hiddenimportsPyQt5.QtCoredatas 拷贝 plugins/platforms
图标模糊高 DPI 屏锯齿Tkinter 加 DPI Awareness,Qt 加 Qt.AA_EnableHighDpiScaling
窗口无焦点macOS 首次启动 Dock 跳两下Info.plistLSUIElement=NO
字体异常中文字符框把字体 TTF 放 datas,代码里 QFontDatabase.addApplicationFont 加载

小结 & 作业(30 秒)

• Tkinter 轻量,一条命令即可交付
• PyQt5/PySide6 需处理资源、插件、高 DPI,用 .spec 模板最稳
• 下节课《第七讲:数据科学项目专场(Numpy/Pandas/Torch 瘦身)》把 500 MB 的机器学习包砍到 150 MB。


大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利

扫一扫,领红包

美团红包

程序员晚枫专注AI编程培训,小白看完他和图灵社区合作的教程《30讲 · AI编程训练营》就能上手做AI项目。

🎓 AI 编程实战课程

想系统学习 AI 编程?程序员晚枫的 AI 编程实战课 帮你从零上手!