如何通过键盘输入关闭Python图形?
我正在尝试写一个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)