Python中使用PyInstaller打包PyQt5程序,如何彻底去掉命令行黑框?
2 回复
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("无控制台窗口示例")
self.setGeometry(100, 100, 400, 300)
label = QLabel("这是一个没有命令行黑框的PyQt5程序", self)
label.setGeometry(50, 50, 300, 50)
if __name__ == "__main__":
# 关键设置:告诉系统这是GUI应用
if sys.platform == "win32":
import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
打包时去掉黑框的两种方法:
- 修改.spec文件(推荐):
# 在生成的spec文件中找到exe=EXE(...)部分,添加console=False参数
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='你的程序名',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False, # 关键参数:设置为False
icon='你的图标.ico')
- 命令行直接打包:
pyinstaller --noconsole --onefile your_script.py
关键点说明:
--noconsole或console=False是核心参数,告诉PyInstaller生成纯GUI应用- Windows系统下,程序类型会被设置为
SUBSYSTEM:WINDOWS而非SUBSYSTEM:CONSOLE - 如果程序需要输出调试信息,建议改用日志文件或GUI调试窗口
一句话总结:打包时加上--noconsole参数就能去掉黑框。
通过修改 CreateProcess 的参数能隐藏控制台窗口,但是如果是 Python 的话可能经过了层层封装,无法直接控制 CreateProcess 的参数。

