👉 项目官网: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()
  1. 一键打包
1
pyinstaller --onefile --noconsole --icon=tk.ico tk_hello.py
  1. 高 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
  1. 资源编译
1
2
pyrcc5 ui/resources.qrc -o ui/resources_rc.py
pyuic5 ui/main.ui -o ui/main_window.py
  1. .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;单文件无需
  1. 打包 & 运行
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 上自动跟随系统深浅色。

  1. 生成 .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 编程实战课程

程序员晚枫专注AI编程培训,通过 《30讲 · AI编程训练营》,让小白也能用AI做出实际项目。帮你从零上手!