Установить логический статус CheckBox в matplotlib без запуска обратных вызовов? - PullRequest
0 голосов
/ 13 ноября 2018

Есть ли способ установить логический статус CheckButtons в matplotlib с обратным вызовом onclick()?

Вот мой сценарий:

Я отображаю график с большим количеством трасс (более 50) и хочу дать пользователю возможность отображать их подмножество на основе некоторых фиксированных запросов, которые пользователь выбирает с помощью CheckButton. При каждом нажатии кнопки скрипт получает статус всех присутствующих CheckButton с помощью get_status(), вычисляет индексы трасс, соответствующих выбранным критериям, и соответствующим образом обновляет отображение.

Чтобы облегчить жизнь пользователю, я также хочу иметь кнопки «Выбрать все» и «Очистить все». Лучший способ, который я могу придумать, чтобы реализовать их, состоит в том, чтобы принудительно установить логическое состояние всех CheckButtons в True или False, не вызывая обратный вызов on_click(), а затем установить видимость трасс соответственно.

Однако CheckButton() не имеет метода set_status() https://matplotlib.org/api/widgets_api.html#matplotlib.widgets.CheckButtons

Существует метод set_active(), но согласно документации он вызывает обратный вызов, если eventson имеет значение true.

Может кто-нибудь дать мне пару советов, как это сделать? Нужно ли устанавливать eventson=False для wdget, затем set_active()=True, а затем eventson=True? Кажется довольно неуклюжим, но я не могу придумать более изящный способ, даже проведя слишком много часов.

Спасибо!

1 Ответ

0 голосов
/ 13 ноября 2018

Я знал это , как только я отправляю вопрос, я выясняю ответ. Вот то, что я придумал для всех, кто хочет сделать что-то вроде этого

    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 в противном случае.

...