关闭 PyCharm 中的图形界面

6

我已经花费了超过一个小时的时间进行搜索,只是为了弄清楚这个简单的问题。因此,在将其视为重复问题之前,请将我的问题与任何其他问题进行比较。

以下是我的代码:

import pandas
import matplotlib.pyplot as plt

dataset = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=1)
print dataset, type(dataset)
plt.plot(dataset)
plt.show()
plt.close()

首先,据我所知,plt.show()是一个阻塞函数。那么如何关闭图形呢?在它后面写plt.close()没有意义。正确的方法在哪里呢?
其次,当我执行同一Python代码的新进程时,如何确保关闭所有窗口?例如,在MATLAB中,可以在文件开头轻松地输入“close all”,这样就可以关闭所有以前执行的MATLAB代码生成的打开的图。plt.close('all')也不起作用。
我正在使用PyCharm。我对第一种情况找到的结果可能适用于IDLE,但对于PyCharm则不适用。在PyCharm中该怎么做呢?

https://stackoverflow.com/questions/52843250/how-could-i-close-a-plot-in-python-and-then-reopen-it#comment92605808_52844016 - manubmxnsb
3个回答

5

plt.show(block=False)可以解决问题 - 这是使此函数在运行和调试模式下都非阻塞的方法。主要缺点是,如果代码结束,图形将自动关闭...


1
你可以在最后加上一个 plt.show(),这样图形窗口就会一直保持打开状态,直到你手动关闭所有窗口,而不会结束程序。 - Jaleks

2

我曾经遇到过同样的问题。解决方法是让Pycharm中的Python文件只在一个控制台中运行。具体操作为:运行---编辑配置---确认"single instance only"已被激活。


1
有两种运行matplotlib的方式,非交互和交互。在非交互模式下,默认情况下,您是正确的,plt.show()是阻塞的。在这种情况下,调用plt.close()是无意义的,只要图形处于打开状态,代码就不会停止。然而,在交互模式下(可以通过plt.ion()触发),此代码将打开然后立即关闭图形。如果您在脚本中运行此类代码,则需要放置某些内容以等待用户输入。交互模式如其名称所示,更适合交互式运行,而不是在脚本中运行。
至于从多个运行Python脚本的窗口关闭图形,这是不可能的。如果您打开多个MATLAB实例,则在一个实例中执行close all不会关闭另一个实例中的图形。运行相同Python代码的多个进程与打开多个MATLAB实例相同,一个运行不知道其他运行的情况。

也许我错误地使用了“process”这个词。在MATLAB中,如果你在代码顶部有一个“close all”行。运行代码-会打开一个图形。再次运行代码,之前打开的图形会关闭。在Python中没有办法做到这一点吗?我这里没有打开多个MATLAB实例。同一实例两次运行相同的代码。 - Jesh Kundem
@JeshKundem 对的,但如果您多次运行Python脚本,则会打开多个Python实例。因此,我的观点是,多次运行Python脚本相当于在单独的MATLAB实例中运行MATLAB脚本。如果您想在同一Python实例中多次运行相同的代码,则应该使用函数而不是脚本,并且应该从Python shell中运行它。或者更好的方法是使用类似于ipython / jupyter笔记本电脑来组织所有代码和图形。 - TheBlackCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接