matplotlib函数内的按钮单击处理程序不起作用

时间:2018-02-01 14:19:06

标签: python matplotlib

如果我在函数内部定义了一个Button click处理程序,它就不起作用。在下面的示例中,图f1和f2看起来相同,但只有当我按下f2上的按钮时,它才会产生输出。

from matplotlib import pyplot as plt
from matplotlib.widgets import Button

def handler(*args, **kwargs):
    print('handled')

def testfn():
    f1 = plt.figure('f1')
    b1 = Button(f1.add_axes([0.4, 0.3, 0.1, 0.04]), 'Click!')
    b1.on_clicked(handler)

f2 = plt.figure('f2')
b2 = Button(f2.add_axes([0.4, 0.3, 0.1, 0.04]), 'Click!')
b2.on_clicked(handler)

testfn()

plt.show()

1 个答案:

答案 0 :(得分:3)

由于the documentation只讲述任何小部件,

  

要使按钮保持响应,您必须保留对它的引用。

因此,您需要从函数返回按钮以保持对它的引用(button = testfn()),否则在函数返回后将立即对其进行垃圾回收。

这个例子看起来像这样:

from matplotlib import pyplot as plt
from matplotlib.widgets import Button

def handler(*args, **kwargs):
    print('handled')

def testfn():
    f1 = plt.figure('f1')
    b1 = Button(f1.add_axes([0.4, 0.3, 0.1, 0.04]), 'Click!')
    b1.on_clicked(handler)
    return b1

f2 = plt.figure('f2')
b2 = Button(f2.add_axes([0.4, 0.3, 0.1, 0.04]), 'Click!')
b2.on_clicked(handler)

button = testfn()

plt.show()