我正在尝试使用按键事件功能来滚动浏览我生成的数据图。该代码应进行简单检查,以查看当前位置是否为有效索引,然后在给定击键时更新curr_pos的值。
<button id="boton1" onclick="doSomething()">
Click
</button>
代码已简化了很多,显然我不是在这里尝试绘制一堆代码。我从文件中读取数据,并且不想在上载此问题时进行处理。无论如何,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才能像这样访问它?
答案 0 :(得分:0)
在您给出的代码中,curr_pos
被定义为test_key()
范围内的局部变量,不是全局范围。考虑下面的简单示例:
def a():
i = 0
def b():
print(i)
b()
a()
这将正常工作,因为print(i)
引用了在i
范围内声明的变量a()
。现在,如果我们这样做
def a():
i = 0
def b():
global i
print(i)
b()
a()
print(i)
现在正在寻找一个在全局范围内声明的i
,但找不到它会引发错误。正确的声明应为
def a():
global i
i = 0
def b():
global i
print(i)
b()
a()
或
I = 0
def a():
def b():
global i
print(i)
b()
a()
其中任何一个都可以正常工作