matplotlib,plt.show() 在不同的方法中 = 没有 on_clicked
matplotlib, plt.show() in a different method = no on_clicked
当我将 plt.show() 放在不同的方法中时,无法单击按钮:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class ButtonTest:
def __init__(self):
ax = plt.axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(ax, 'Next')
bnext.on_clicked(self._next)
# plt.show()
def show(self):
print("when i put plt.show() in a different method, it's impossible to click the button")
plt.show()
def _next(self, event):
print("next !")
b = ButtonTest()
b.show()
当鼠标移到该按钮上时,该按钮甚至没有突出显示。有人知道为什么以及如何解决这个问题吗?
发生的事情是按钮对象在显示绘图之前被垃圾收集。您需要保留对它的引用。
例如,如果您更改
bnext = Button(...)
到
self.bnext = Button(...)
一切正常。
作为一个完整的例子:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class ButtonTest:
def __init__(self):
ax = plt.axes([0.81, 0.05, 0.1, 0.075])
self.bnext = Button(ax, 'Next')
self.bnext.on_clicked(self._next)
def show(self):
plt.show()
def _next(self, event):
print("next !")
ButtonTest().show()
当我将 plt.show() 放在不同的方法中时,无法单击按钮:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class ButtonTest:
def __init__(self):
ax = plt.axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(ax, 'Next')
bnext.on_clicked(self._next)
# plt.show()
def show(self):
print("when i put plt.show() in a different method, it's impossible to click the button")
plt.show()
def _next(self, event):
print("next !")
b = ButtonTest()
b.show()
当鼠标移到该按钮上时,该按钮甚至没有突出显示。有人知道为什么以及如何解决这个问题吗?
发生的事情是按钮对象在显示绘图之前被垃圾收集。您需要保留对它的引用。
例如,如果您更改
bnext = Button(...)
到
self.bnext = Button(...)
一切正常。
作为一个完整的例子:
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class ButtonTest:
def __init__(self):
ax = plt.axes([0.81, 0.05, 0.1, 0.075])
self.bnext = Button(ax, 'Next')
self.bnext.on_clicked(self._next)
def show(self):
plt.show()
def _next(self, event):
print("next !")
ButtonTest().show()