如何在Windows CMD中运行Python脚本并显示绘图与文本输出?
解决CMD中同时显示Python文本输出与绘图的问题
这种情况大多和绘图库的后端设置以及窗口显示逻辑有关,下面针对最常用的matplotlib库给出具体解决步骤,其他绘图库思路类似:
1. 检查并设置正确的绘图后端
默认情况下,部分Python环境的matplotlib可能会使用非交互式后端(比如Agg),这种后端只会生成图片文件,不会弹出窗口。我们需要手动指定支持窗口显示的后端:
# 在导入matplotlib.pyplot前设置后端 import matplotlib # 选择兼容Windows的交互式后端,比如TkAgg或Qt5Agg matplotlib.use('TkAgg') import matplotlib.pyplot as plt
注:如果你的系统没有安装Tkinter,可能需要先通过
pip install tk安装,或者换成Qt5Agg(需要提前安装PyQt5依赖)。
2. 确保触发绘图窗口显示
绘图代码写完后,必须调用plt.show()来弹出窗口。根据需求不同,有两种调用方式:
方式一:先输出文本,再显示窗口(窗口关闭后程序结束)
print("===== 这是控制台文本输出 =====") # 绘制示例图形 plt.plot([1,3,5], [2,6,10]) plt.xlabel("X轴") plt.ylabel("Y轴") plt.title("测试折线图") # 显示窗口,此调用会阻塞程序,直到关闭窗口才继续执行后续逻辑 plt.show()
运行python.exe D:\2019\Python\web.py后,CMD会先显示文本,接着弹出绘图窗口,关闭窗口后程序自动退出。
方式二:同时显示窗口和后续文本输出
如果需要窗口弹出后,程序继续运行并输出文本,可以用block=False让窗口非阻塞显示,再通过输入等待防止窗口自动关闭:
# 绘制图形 plt.plot([1,3,5], [2,6,10]) plt.title("测试折线图") # 非阻塞显示窗口(窗口弹出后程序继续执行后续代码) plt.show(block=False) # 输出后续文本内容 print("===== 窗口已弹出,这是后续文本输出 =====") # 等待用户输入,避免窗口自动关闭 input("按下回车键关闭窗口并退出程序...") plt.close()
这种方式下,绘图窗口和CMD的文本会同时存在,直到用户按回车才结束程序。
3. 关于pythonw.exe的说明
pythonw.exe是无控制台的Python运行程序,它不会创建CMD窗口,所以print的文本没有输出渠道,同时部分绘图库在无控制台环境下可能无法正常初始化窗口事件循环,因此不适合你的需求,专注使用python.exe即可。
内容的提问来源于stack exchange,提问作者OMY




