Проверка того, какой элемент был выбран в CheckButtons [duplicate]

Ваши наблюдения над наименованием Tensor абсолютно правильны: имя Tensor является конкатенацией

  1. имени выполняемой операции,
  2. двоеточие (:) и
  3. индекс этого тензора на выходах операции, которая его произвела.

Поэтому тензор с именем "foo:2" является выходом op с именем "foo" в позиции 2 (с индексами, начинающимися с нуля).

Именование объектов tf.Variable немного странно. Каждый tf.Variable содержит объект изменчивого тензора , который содержит состояние переменной (и несколько других тензоров). A "Variable" op (который имеет имя "variable_name" в вашем примере) «производит» этот изменяемый тензор каждый раз, когда он запускается как его 0-й выход, поэтому имя изменяемого тензора "variable_name:0".

Поскольку a tf.Variable в основном неотличим от tf.Tensor & mdash; в нем его можно использовать в тех же местах: mdash; мы приняли решение сделать имена переменных похожими на имена тензоров, поэтому свойство Variable.name возвращает имя изменяемый тензор. (Это контрастирует с объектами tf.QueueBase и tf.ReaderBase , которые не используются непосредственно в качестве тензоров (вместо этого вы должны вызывать методы на них для создания ops, которые работают на их состоянии), поэтому они не имеют тензорного имени.)

4
задан illumi 23 July 2013 в 15:27
поделиться

3 ответа

Возможно, возможно, более элегантный способ, но вы всегда можете сами отслеживать состояния каждого из этих флажков. в dict. Функция, которую вы укажете с помощью on_clicked(), получит строку метки активного флажка в качестве ее второго аргумента, которую вы затем можете использовать для обновления состояния соответствующим образом:

import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons

class Example:

    def onColor(self,label):
        self.cstates[label] = not self.cstates[label]
        print 'un'*(not self.cstates[label]) + 'checked %s' %label
        self.updateChart()

    def onMeasurement(self,label):
        self.mstates[label] = not self.mstates[label]
        print 'un'*(not self.mstates[label]) + 'checked %s' %label
        self.updateChart()

    def updateChart(self, event=None):
        """do something here using self.cstates and self.mstates?"""
        pass

    def __init__(self):
        colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
        measurementax = plt.axes([0.5, 0.6, 0.09, 0.2])
        clabels, cvals = ('Red', 'Green', 'Blue'), (False,)*3
        mlabels, mvals = ('1', '2', '3'), (False,)*3
        self.cstates = dict(zip(clabels,cvals))
        self.mstates = dict(zip(mlabels,mvals))
        self.colours = CheckButtons(colourax, clabels, cvals)
        self.colours.on_clicked(self.onColor)
        self.measurements = CheckButtons(measurementax, mlabels, mvals)
        self.measurements.on_clicked(self.onMeasurement)

    def run(self):
        plt.show()

ex = Example()
ex.run()

Не самый красивый, но он работает!

1
ответ дан ali_m 1 September 2018 в 02:17
поделиться

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

import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons

colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
colours = CheckButtons(colourax, ('Red', 'Green', 'Blue'), (False, False, False))

isRedChecked = colours.lines[0][0].get_visible()
isGreenChecked = colours.lines[1][0].get_visible()
isBlueChecked = colours.lines[2][0].get_visible()
6
ответ дан Gruby 1 September 2018 в 02:17
поделиться

Текущая версия разработки (по состоянию на июль 2017 года) имеет встроенный метод

CheckButtons.get_status()

. Это можно использовать для запроса текущего состояния флажков. Он должен быть выпущен в стабильной версии довольно скоро. ( Источник здесь )

До тех пор вы можете эмулировать это поведение, используя свой собственный метод get_status, как показано ниже. Он использует тот же механизм, что и метод get_status() из версии разработки, который также очень близок к тому, что предлагает ответ @Gruby (смотря на видимость строк).

import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons

class Example:

    def updateChart(self, event):
        colour = self.get_status(self.colours)
        measurement = self.get_status(self.measurements)
        print measurement, colour

    def get_status(self, cb):
        return [l1.get_visible() for (l1, l2) in cb.lines]


    def __init__(self):
        colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
        measurementax = plt.axes([0.5, 0.6, 0.09, 0.2])
        self.colours = CheckButtons(colourax, ('Red', 'Green', 'Blue'), (False, False, False))
        self.measurements = CheckButtons(measurementax, ('1', '2', '3'), (False, False, False))
        self.colours.on_clicked(self.updateChart)
        self.measurements.on_clicked(self.updateChart)

    def run(self):
        plt.show()

ex = Example()
ex.run()
2
ответ дан ImportanceOfBeingErnest 1 September 2018 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: