【发布时间】:2020-01-22 09:06:13
【问题描述】:
我正在尝试使用按键事件函数来滚动浏览我生成的数据图。代码应该做一个简单的检查,看看当前位置是否是一个有效的索引,然后在给定的击键时更新 curr_pos 的值。
def test_key():
import matplotlib.pyplot as plt
curr_pos=0
dt = 1
numtimes = 5
def key_event(e):
global curr_pos
if curr_pos - dt <= 0:
if e.key == "right":
curr_pos = curr_pos + dt
else:
return
elif curr_pos + dt >= numtimes:
if e.key == "left":
curr_pos = curr_pos - dt
else:
return
else:
if e.key == "right":
curr_pos = curr_pos + dt
elif e.key == "left":
curr_pos = curr_pos - dt
else:
return
ax.cla()
ax.plot([1,1,1], [1,1,1])
ax.title('time index: '+str(curr_pos))
fig.canvas.draw()
fig = plt.figure()
fig.canvas.mpl_connect('key_press_event', key_event)
ax = fig.add_subplot(111)
ax.plot([1,1,1], [1,1,1])
plt.show()
代码被简化了很多,显然我不想在这里绘制一堆。我从文件中读取数据,并且不想在上传这个问题时处理这个问题。无论如何,curr_pos 最终将用于选择将要绘制的数据的索引。这应该会重现我遇到的错误:
Traceback (most recent call last):
File "/home/ckswee/.local/lib/python3.6/site-packages/matplotlib/cbook/__init__.py", line 216, in process
func(*args, **kwargs)
File "/home/ckswee/Documents/strahl/test_key.py", line 18, in key_event
if curr_pos - dt <= 0:
NameError: name 'curr_pos' is not defined
我是否必须以不同的方式定义我的变量 curr_pos 才能像这样访问它?
【问题讨论】:
-
ax.set_title而不是ax.title。当然,该变量在它使用的每个函数中都必须是全局的。 -
导入应该放在文件的顶部。为什么要在另一个函数中定义一个函数?
-
你有机会看看我的回答吗?如果还不清楚,我可以给出更多解释
标签: python matplotlib canvas global-variables