如果我在函数内定义按钮单击处理程序,它将不起作用。在下面的示例中,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()
Run Code Online (Sandbox Code Playgroud)
由于文档只介绍了任何小部件,
为了使按钮保持响应,您必须保留对其的引用。
因此,您需要从函数返回按钮以保留对它的引用 ( 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()
Run Code Online (Sandbox Code Playgroud)