👉 项目官网:https://www.python-office.com/ 👈
👉 本开源项目的交流群 👈
大家好,这里是程序员晚枫,全网同名。
(Tkinter / PyQt5 / PySide6 一次讲透,带图标、高 DPI、暗黑模式)
开场 30 秒
“GUI 程序打包后双击无窗口、图标模糊、Qt 插件缺失?”
本讲 20 分钟,用 3 个完整案例演示“从源码到安装包”的全流程,并给出可复制粘贴的 .spec
模板。
6.0 前置清单(1 min)
工具 | 版本 | 作用 |
---|---|---|
pyinstaller | ≥ 6.8 | 核心打包 |
Tkinter | Python 内置 | 轻量 GUI |
PyQt5 / PySide6 | pip 最新 | 跨平台商业级 UI |
Qt-Tool | pip install pyqt5-tools |
生成 .qrc / designer |
6.1 Tkinter 单文件打包(5 min)
示例源码
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
pyinstaller --onefile --noconsole --icon=tk.ico tk_hello.py
高 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
2
3
4
5
6
7
8myqt/
├─ main.py
├─ ui/
│ ├─ main.ui
│ └─ resources.qrc
├─ icons/
│ └─ app.ico
└─ requirements.txt资源编译
1
2pyrcc5 ui/resources.qrc -o ui/resources_rc.py
pyuic5 ui/main.ui -o ui/main_window.py.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
2pyinstaller MyQtApp.spec
dist/MyQtApp/MyQtApp.exe # 或 .app / 无后缀
6.3 PySide6 暗黑模式与 macOS .app(4 min)
启用系统暗黑
1
2
3# 在 main.py
from PySide6.QtCore import QCoreApplication, Qt
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)macOS 上自动跟随系统深浅色。
生成 .app 结构
1
pyinstaller --onedir --name MySideApp --noconsole --icon app.icns main.py
输出
1
2dist/MySideApp.app/
└─ Contents/MacOS/MySideApp可用
codesign
签名后再发用户。
6.4 通用避坑清单(2 min)
问题 | 症状 | 解决 |
---|---|---|
Qt 插件缺失 | 启动报 could not find or load the Qt platform plugin |
确保 hiddenimports 含 PyQt5.QtCore 且 datas 拷贝 plugins/platforms |
图标模糊 | 高 DPI 屏锯齿 | Tkinter 加 DPI Awareness,Qt 加 Qt.AA_EnableHighDpiScaling |
窗口无焦点 | macOS 首次启动 Dock 跳两下 | Info.plist 加 LSUIElement=NO |
字体异常 | 中文字符框 | 把字体 TTF 放 datas ,代码里 QFontDatabase.addApplicationFont 加载 |
小结 & 作业(30 秒)
• Tkinter 轻量,一条命令即可交付
• PyQt5/PySide6 需处理资源、插件、高 DPI,用 .spec
模板最稳
• 下节课《第七讲:数据科学项目专场(Numpy/Pandas/Torch 瘦身)》把 500 MB 的机器学习包砍到 150 MB。
大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利