如何通过键盘输入关闭Python图形?

20 投票
3 回答
24390 浏览
提问于 2025-04-18 01:38

我正在尝试写一个Python程序,这个程序可以一直显示一个图形,直到我按下任意键后再关闭它。

其实,这个Python程序的功能应该和下面的Matlab代码一样:

t = 0:0.01:2;
s = sin(2 * pi * t);

plot(t,s)

pause
close

在Python中,我可以画出这个图形,但在我按下键盘后,什么也没有发生。

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)

#plt.ion()
fig = plt.figure()
plt.plot(t,s)
#plt.show()
plt.draw()

raw_input("PRESS ANY KEY TO CONTINUE.")
plt.close(fig)

到目前为止,我发现 plt.close(fig)plt.show() 一起使用时没有任何效果。不过,当我用 plt.draw() 代替时,plt.close(fig) 就能关闭图形了。但是,当我在程序中加入 raw_input("PRESS ANY KEY TO CONTINUE.") 后,图形根本不显示。

我哪里做错了呢?

我还尝试过使用 plt.ion(),但也没有成功。

3 个回答

1

截至撰写本文(2021年12月,使用Windows上的Matplotlib 3.5),按下 q 键似乎默认会关闭一个图形窗口——至少在我尝试的Tk和Qt图形界面中是这样的。如果你想用其他特定的键,比如 escape 键,可以参考这个讨论,里面介绍了如何处理事件的方法:

import matplotlib.pyplot as plt
import numpy as np

def close_figure(event):
    if event.key == 'escape':
        plt.close(event.canvas.figure)

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2 * np.pi * t)

plt.plot(t, s)
plt.gcf().canvas.mpl_connect('key_press_event', close_figure)
plt.show()
22

我觉得使用 plt.waitforbuttonpress(0) 可以解决用 raw_input() 的问题:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)

fig = plt.figure()
plt.plot(t,s)
plt.draw()
plt.waitforbuttonpress(0) # this will wait for indefinite time
plt.close(fig)
11

可能像这样吧?

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)


fig = plt.figure()
plt.plot(t,s)
#plt.show()
plt.draw()
plt.pause(1) # <-------
raw_input("<Hit Enter To Close>")
plt.close(fig)

撰写回答