通过检测按下的键来刷新和关闭绘图
Refresh and close a plot by detecting key pressed
我有一个简单的循环绘制从文件夹中读取的数据。它会永远循环更新绘图,我想在按 ESC 时结束程序。
到目前为止,我写了
fig = plt.figure()
plt.axes()
while True:
... # loop over data and plot
plt.draw()
plt.waitforbuttonpress(0)
plt.cla()
如果我通过单击 X 图标关闭图窗,程序将以错误结束。我可以通过
来避免错误
try:
plt.waitforbuttonpress(0)
except:
break
但我仍然希望能够通过在绘图上按 ESC 来终止程序。另外,如果我用 CTRL+W 关闭情节,情节会重新出现。
我尝试添加一个事件检测,比如
def parse_esc(event):
if event.key == 'press escape':
sys.exit(0)
fig.canvas.mpl_connect('key_press_event', parse_esc)
但是没有检测到ESC。
我尝试使用 close_event
而不是 key_press_event
但 sys.exit(0)
给出了以下错误
while executing
"140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??"
invoked from within
"if {"[140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??]" == "break"} break"
(command bound to event)
我也想删除循环并仅在检测到 R 时刷新绘图,但这并不那么重要。
感谢任何帮助,谢谢。
如果有人需要做类似的事情,这就是我所做的
folder = ...
def update():
plt.cla()
for f in os.listdir(folder):
if f.endswith(".dat"):
data = ...
plt.plot(data)
plt.draw()
print('refreshed')
def handle(event):
if event.key == 'r':
update()
if event.key == 'escape':
sys.exit(0)
fig = plt.figure()
plt.axes()
picsize = fig.get_size_inches() / 1.3
fig.set_size_inches(picsize)
fig.canvas.mpl_connect('key_press_event', handle)
update()
input('')
我有一个简单的循环绘制从文件夹中读取的数据。它会永远循环更新绘图,我想在按 ESC 时结束程序。 到目前为止,我写了
fig = plt.figure()
plt.axes()
while True:
... # loop over data and plot
plt.draw()
plt.waitforbuttonpress(0)
plt.cla()
如果我通过单击 X 图标关闭图窗,程序将以错误结束。我可以通过
来避免错误 try:
plt.waitforbuttonpress(0)
except:
break
但我仍然希望能够通过在绘图上按 ESC 来终止程序。另外,如果我用 CTRL+W 关闭情节,情节会重新出现。 我尝试添加一个事件检测,比如
def parse_esc(event):
if event.key == 'press escape':
sys.exit(0)
fig.canvas.mpl_connect('key_press_event', parse_esc)
但是没有检测到ESC。
我尝试使用 close_event
而不是 key_press_event
但 sys.exit(0)
给出了以下错误
while executing
"140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??"
invoked from within
"if {"[140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??]" == "break"} break"
(command bound to event)
我也想删除循环并仅在检测到 R 时刷新绘图,但这并不那么重要。
感谢任何帮助,谢谢。
如果有人需要做类似的事情,这就是我所做的
folder = ...
def update():
plt.cla()
for f in os.listdir(folder):
if f.endswith(".dat"):
data = ...
plt.plot(data)
plt.draw()
print('refreshed')
def handle(event):
if event.key == 'r':
update()
if event.key == 'escape':
sys.exit(0)
fig = plt.figure()
plt.axes()
picsize = fig.get_size_inches() / 1.3
fig.set_size_inches(picsize)
fig.canvas.mpl_connect('key_press_event', handle)
update()
input('')