我在Windows上使用python 2.7。 我有一个函数,它创建一个带有CheckButtons小部件的图形,它还包括按钮的回调的定义。当我调用该函数一次时,一切正常,但是当我多次调用它时,按钮停止响应,如下所示:
plt.subplots()
创建图形,则没有任何按钮响应。plt.figure()
创建的,则行为不一致;有时只有第一个创建的按钮响应,有时两者都会响应。我的猜测是,这与回调的范围有关,但我无法使用反复试验查明问题。
示例代码:
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
def create_button():
plt.subplots() # or: plt.figure()
rax = plt.axes([0.2, 0.2, 0.2, 0.2])
check = CheckButtons(rax, ['on'], [True])
def callback(label):
check.labels[0].set_text('on' if check.lines[0][0].get_visible() else 'off')
plt.draw()
check.on_clicked(callback)
create_button()
#create_button() # uncomment to reproduce problem
plt.show()
答案 0 :(得分:2)
事实证明问题是函数返回后在函数内创建的CheckButtons
实例不再存在。
我想出的解决方案是在调用函数的范围内保留一个列表(我在类中使用了一个静态变量),并将该实例从函数中追加到此列表中。这样,当函数退出时,CheckButtons
实例仍然存在。为了使该列表不会超过需要,我还编写了一个从列表中删除相应实例的函数,并将此函数注册为用户关闭图形事件的回调。
如果存在这样的解决方案,我将很高兴听到有关我的解决方案的评论或更多Python解决方案的建议。
答案 1 :(得分:1)
我认为如果你在函数结尾处return check
,这将有助于在退出时保持按钮处于活动状态。