我需要在 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 嵌入式按鈕。有沒有簡單的方法來解決這個問題?
uj5u.com熱心網友回復:
問題來自您將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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374262.html
標籤:Python for循环 matplotlib 特金特 按钮
