python,在for循环中创建多个matplotlib按钮小部件
python, create multiple matplotlib button widgets in for loop
我需要在 matplotlib 中生成可变数量(总数)的按钮小部件,并让每个按钮小部件在变量 var 中存储不同的数字。
import matplotlib.pyplot as plt
from matplotlib.widgets import Button as BT
total = 4
class Index:
ind = 0
def plot_pick(self, event):
var=event
print(var)
ax_chooseplot={}
chooseplot_BT={}
callback=Index()
for i in range(0,total):
loc=0.95-i*0.03
ax_chooseplot[i] = plt.axes([loc-0.002, 0.87, 0.02, 0.03])
chooseplot_BT[i] = BT(ax_chooseplot[i], '')
chooseplot_BT[i].on_clicked(callback.plot_pick(i))
plt.show()
此代码按顺序打印 i 然后按任何按钮:
TypeError: 'NoneType' object is not callable
似乎在 for 循环中调用了函数“plot_pick”,然后丢弃了 i 的值?
我已经看到针对 tkinter 按钮解决了这个问题,但我一直无法将这些答案应用于 matplotlib 嵌入式按钮。有解决这个问题的简单方法吗?
问题出在您将 i
参数传递给 plot_pick
函数的方式。将它直接传递给您的函数是行不通的。一种可能的替代方法是使用 functools.partial
。您可以在下面找到我使用 functools.partial
打印被点击按钮的索引的示例:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button as BT
import functools
total = 4
class Index:
ind = 0
def plot_pick(self,i, event):
print('Button '+str(i))
ax_chooseplot={}
chooseplot_BT={}
callback=Index()
for i in range(0,total):
loc=0.95-i*0.03
ax_chooseplot[i] = plt.axes([loc-0.002, 0.87, 0.02, 0.03])
chooseplot_BT[i] = BT(ax_chooseplot[i], str(i))
chooseplot_BT[i].on_clicked(functools.partial(callback.plot_pick,i))
plt.show()
我需要在 matplotlib 中生成可变数量(总数)的按钮小部件,并让每个按钮小部件在变量 var 中存储不同的数字。
import matplotlib.pyplot as plt
from matplotlib.widgets import Button as BT
total = 4
class Index:
ind = 0
def plot_pick(self, event):
var=event
print(var)
ax_chooseplot={}
chooseplot_BT={}
callback=Index()
for i in range(0,total):
loc=0.95-i*0.03
ax_chooseplot[i] = plt.axes([loc-0.002, 0.87, 0.02, 0.03])
chooseplot_BT[i] = BT(ax_chooseplot[i], '')
chooseplot_BT[i].on_clicked(callback.plot_pick(i))
plt.show()
此代码按顺序打印 i 然后按任何按钮:
TypeError: 'NoneType' object is not callable
似乎在 for 循环中调用了函数“plot_pick”,然后丢弃了 i 的值?
我已经看到针对 tkinter 按钮解决了这个问题,但我一直无法将这些答案应用于 matplotlib 嵌入式按钮。有解决这个问题的简单方法吗?
问题出在您将 i
参数传递给 plot_pick
函数的方式。将它直接传递给您的函数是行不通的。一种可能的替代方法是使用 functools.partial
。您可以在下面找到我使用 functools.partial
打印被点击按钮的索引的示例:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button as BT
import functools
total = 4
class Index:
ind = 0
def plot_pick(self,i, event):
print('Button '+str(i))
ax_chooseplot={}
chooseplot_BT={}
callback=Index()
for i in range(0,total):
loc=0.95-i*0.03
ax_chooseplot[i] = plt.axes([loc-0.002, 0.87, 0.02, 0.03])
chooseplot_BT[i] = BT(ax_chooseplot[i], str(i))
chooseplot_BT[i].on_clicked(functools.partial(callback.plot_pick,i))
plt.show()