【发布时间】:2020-08-14 18:21:27
【问题描述】:
我想要一个只能使用一次的 matplotlib 按钮。理想情况下,我可以通过断开回调来做到这一点。但是,回调断开本身存在时间问题。
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
fig, ax = plt.subplots()
donebutton = Button(ax, "Disconnect the button")
def donecallback(event):
donebutton.disconnect(donecid)
print("Disconnected")
donecid = donebutton.on_clicked(donecallback)
plt.show()
要断开回调,我需要它的回调 ID,donecid,这是我在连接回调时获得的。要连接回调,我首先必须定义它,donecallback。要定义回调,我必须已经知道 CID。因此,我陷入了先有鸡还是先有蛋的问题。
有一些变通方法,例如定义一个类以便我可以通过self 将数据传递到回调中,具有一个跟踪按钮是否被按下的全局标志,或者创建一个没有回调的新的相同按钮连接的。但是,如果有更简单的方法,那就太好了。有吗?
编辑: 当我使用我提供的代码时,会发生以下错误。或者dnalow提供的代码。
func(*args, **kwargs)
File "C:\Users\MyName\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\matplotlib\widgets.py", line 210, in _release
for cid, func in self.observers.items():
RuntimeError: dictionary changed size during iteration```
【问题讨论】:
标签: python matplotlib callback