【问题标题】:Set logical status of CheckBox in matplotlib without triggering callbacks?在 matplotlib 中设置 CheckBox 的逻辑状态而不触发回调?
【发布时间】:2023-04-02 12:50:01
【问题描述】:

有没有办法在 matplotlib 中设置 CheckButtons 的逻辑状态并触发onclick() 回调?

这是我的场景:

我正在显示一个包含大量跟踪 (50+) 的图表,并希望根据用户通过CheckButton 选择的一些固定查询,让用户可以选择显示其中的一个子集。每次单击按钮时,脚本都会通过get_status() 获取所有当前CheckButtons 的状态,计算符合所选标准的迹线的索引,并相应地更新显示。

为了让用户的生活更轻松,我还希望有一个“全选”和“全部清除”按钮。我能想出的实现这些的最佳方法是在不触发on_click() 回调的情况下强制所有 CheckButtons 的逻辑状态为 True 或 False,然后相应地设置跟踪的可见性。

但是,CheckButton() 没有 set_status() 方法 https://matplotlib.org/api/widgets_api.html#matplotlib.widgets.CheckButtons

有一个set_active() 方法,但根据文档,如果eventson 为真,它会触发回调。

有人可以给我一些建议吗?我是否需要为 wdget 设置 eventson=False,然后是 set_active()=True,然后是 eventson=True?看起来相当笨重,但我想不出更优雅的方式,即使花费了太多时间。

谢谢!

【问题讨论】:

    标签: python python-2.7 matplotlib matplotlib-widget


    【解决方案1】:

    我就知道了,我一发问题就知道答案了。这是我为其他想做类似事情的人提出的建议

        check.eventson = False
        status = check.get_status()
        for i,stat in enumerate(status):
            if ((enable and not stat) or (not enable and stat)): 
                check.set_active(i)
        check.eventson = True
    

    这里的 check 是对 CheckBox() 对象的引用,enable 是一个变量,如果要启用所有复选框,则设置为 True,否则为 False

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2019-07-13
      • 2017-12-08
      • 1970-01-01
      • 2020-08-15
      相关资源
      最近更新 更多