会员登录 立即注册

搜索

python禁用控制台

[复制链接]
崎山小鹿 发表于 前天 14:46 | 显示全部楼层 |阅读模式
崎山小鹿
前天 14:46 67 0 看全部
Python 解释器在执行代码时附带的控制台(Console)窗口。对于图形用户界面(GUI)程序来说,隐藏这个窗口是很常见的需求。
禁用控制台
在 PyInstaller 中使用 --noconsole 或 --windowed 参数非常简单。这两个参数作用完全相同,都是告诉 PyInstaller 在创建可执行文件(.exe)时,不要附带那个黑色的控制台窗口。
-w        --noconsole, --windowed        创建无控制台窗口的程序。

pyinstaller --noconsole your_script.py
禁用了控制台后,你的程序如果发生崩溃或有 print 输出,你将看不到任何信息。

新进程的影响
控制台窗口依然会“一闪而过”。

这个现象的根本原因在于:在你的图形界面(GUI)完全加载并显示出来之前,PyInstaller 的引导程序(bootloader)或者你的 Python 脚本中的某些早期代码(比如某个 import 语句)执行了一些会触发控制台的操作。
这个过程非常快,但足以让一个黑框在屏幕上闪现一下

当你使用 subprocess.check_output (或 subprocess.run) 时,Windows 默认会为这个新进程创建一个控制台窗口。虽然 wmic 命令执行得非常快,但这个窗口创建和销毁的过程,就是你看到的那个“一闪而过”的黑框。

即使你使用了 --noconsole 参数打包,这个参数只作用于你的 Python 脚本主进程,它管不了你的脚本后来又创建的其他子进程。
CREATE_NO_WINDOW = 0x08000000
添加参数:creationflags=CREATE_NO_WINDOW
如下:
import subprocess

# Windows specific flag to prevent creating a new console window
# 为 subprocess.run 添加 creationflags 参数
CREATE_NO_WINDOW = 0x08000000

# 这样调用就不会闪现黑框了
subprocess.run(
    ["ping", "localhost"],
    capture_output=True,
    creationflags=CREATE_NO_WINDOW
)



启动画面
使用 PyInstaller 的启动画面(Splash Screen)功能。

这个方法并不能“消除”闪现,而是用一张漂亮的图片来“覆盖”它,极大地提升用户体验。当你的程序在后台解压和初始化时,用户看到的是一个加载图片,而不是一个黑框。

准备一张 .png 格式的图片,比如 splash.png。

在打包时添加 --splash 参数。

在你的代码中,当 GUI 准备好之后,调用特定代码来关闭这个启动画面
pyinstaller --noconsole --onefile --splash "splash.png" your_script.py

try:
    import pyi_splash
    pyi_splash.close()
except ImportError:
    pass # 如果不是在 PyInstaller 环境中运行,则忽略
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

  • 您可能感兴趣
您需要登录后才可以回帖 登录 | 立即注册 |

本版积分规则 返回列表

管理员给TA私信
以墨运商,以商助墨。

查看:67 | 回复:0

金双石科技,软件开发20年,技术行业领先,您的满意,就是我们的目标,认真负责,开拓进取,让成品物超所值
关于我们
公司简介
发展历程
联系我们
本站站务
友情链接
新手指南
内容审核
商家合作
广告合作
商家入驻
新闻合作

手机APP

官方微博

官方微信

联系电话:15876572365 地址:深圳市宝安区西乡街道宝民二路宝民花园 ( 粤ICP备2021100124号-1 ) 邮箱:qishanxiaolu@qq.com
QQ|Powered by Discuz! X3.5 © 2001-2025 Discuz! Team.
快速回复 返回顶部 返回列表