Ожидаемое поведение:
Приведенный ниже код рисует график, и как только я нажму на значок легенды для нарисованного графика, я ожидаю появления двух строк текста: 1) «метод нестатического обработчика событий работает» и 2) «статический обработчик событий» метод работает".
Фактическое поведение:
Как только я нажимаю на значок легенды, это только второй оператор который появляется на терминале. Это указывает на то, что по какой-то причине Python не выполняет функцию обработчика событий «nonstatic_onpick», возможно, потому, что она была предоставлена как нестатический метод. Почему это так? Я где-то допустил синтаксическую ошибку? Есть ли способ предоставить функцию обработчика событий как нестатический метод?
Примечание:
(Я понимаю, что приведенный ниже код может быть не самым элегантным/эффективным/читабельным алгоритмом. но на самом деле я адаптировал это кодирование из другого, более сложного варианта использования, который требует, чтобы алгоритм имел текущую структуру, показанную ниже.)
Кодирование:
Код: Выделить всё
import matplotlib.pyplot as plt
class Setup_IntrctveLgnd():
def __init__(self,legend,fig):
lgndicons=legend.legend_handles
lgndicons[0].set_picker(20)
fig.canvas.mpl_connect("pick_event", self.nonstatic_onpick)
fig.canvas.mpl_connect("pick_event", Setup_IntrctveLgnd.static_onpick)
def nonstatic_onpick(self,event):
print("non static event handler method working")
def static_onpick(event):
print("static event handler method working")
fig,ax=plt.subplots()
ax.plot([0,1,2,3], label="data")
legend=plt.legend()
Setup_IntrctveLgnd(legend,fig)
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-provided