Python中使用PyInstaller打包PyQt5程序,如何彻底去掉命令行黑框?

pyqt5 做的 gui,点上面的按钮先要打开一个浏览器(用的是 webdriver 实现)
能正常运行。
用 pyinstaller XX.py 打包后,直接打开就有一个黑框

然后我加了参数-w
pyinstaller -w xx.py
启动的黑框没了,但点按钮后,出来一个 geckodriver.exe 的命令行(黑框 ),

怎么回事呢?能去掉吗?
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_())

打包时去掉黑框的两种方法:

  1. 修改.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')
  1. 命令行直接打包
pyinstaller --noconsole --onefile your_script.py

关键点说明:

  • --noconsoleconsole=False 是核心参数,告诉PyInstaller生成纯GUI应用
  • Windows系统下,程序类型会被设置为SUBSYSTEM:WINDOWS而非SUBSYSTEM:CONSOLE
  • 如果程序需要输出调试信息,建议改用日志文件或GUI调试窗口

一句话总结:打包时加上--noconsole参数就能去掉黑框。


通过修改 CreateProcess 的参数能隐藏控制台窗口,但是如果是 Python 的话可能经过了层层封装,无法直接控制 CreateProcess 的参数。

回到顶部