taurus-org / taurus

Moved to https://gitlab.com/taurus-org/taurus
http://taurus-scada.org
43 stars 46 forks source link

Spectrum (or Array) Subset in SetModel #1169

Open hayg25 opened 3 years ago

hayg25 commented 3 years ago

Dear All, I have an array (spectrum) as device attribute. I would like to modify some elements (from their id) in a TaurusModel like a TaurusWheelEdit. How could I make that selection ? Example :

       model = TaurusWheelEdit() 
       model.SetModel('test/group/simulated/spectrum_type_attribute[1:10]') 

Thanks

hayg25 commented 3 years ago

I again : concerning my example It should not work since TaurusWheelEdit() would only work for scalar type attribute but If I do :

       model = TaurusWheelEdit() 
       model.SetModel('test/group/simulated/spectrum_type_attribute[7]') 

It does not work either.

Thanks

cpascual commented 3 years ago

Hi, I am afraid that what you intend to do is not possible with the existing widgets.

To modify array attributes, we only have TaurusValuesTable.

For doing what you want you would need to create your own custom widget (maybe based on TaurusValueWheelEdit) to support 1D and 2D attributes. In that case, you could make use of the fragments API for slicing

hayg25 commented 3 years ago

Hi @cpascual, so playing with some examples I saw different effects. If I use TaurusPlot() it works fine. But If I use a TaurusTrend() I have the following problem : Simple example (Taurus 4.4):

class GraphiqueTendance(TaurusWidget):
    """
    Graphique affichant deux variables en fonction du temps.
    """
    def __init__(self, parent=None):
        # appel de l'initialisation de la classe parent 
        TaurusWidget.__init__(self, parent=parent)

        ## DEBUT ZONE MODIFIABLE
        # initialisation de l'objet avec ses proprietes
        tendance = TaurusTrend()

        # creation du modele : on peut ajouter plusieurs variables
        modelTendance = ['sys/tg_test/1/long64_scalar', 'sys/tg_test/1/long_scalar']

        # definition des abcisses comme axe du temps
        tendance.setXIsTime(True)  # to show the x values as time

        # création et application d'un cadre visuel sous forme de grille
        layout = Qt.QGridLayout()
        self.setLayout(layout)

        # association objet-device
        tendance.setModel(modelTendance)
        tendance.setCurvesTitle('Curve A', ['sys/tg_test/1/long64_scalar'])
        tendance.setCurvesTitle('Curve B', ['sys/tg_test/1/long_scalar'])
        tendance.setAxisTitle(0, 'Y title')
        tendance.setAxisTitle(2, 'X title')
        layout.addWidget(tendance)

Error message :

MainThread     INFO     2021-02-02 16:41:44,393 TaurusRootLogger: Using "PyQt4" for Qt
MainThread     INFO     2021-02-02 16:41:44,448 taurus.qt.qtgui.icon.icon: Setting Tango icon theme (from /usr/local/lib/python2.7/dist-packages/taurus/qt/qtgui/icon/)
Traceback (most recent call last):
  File "graphiqueTendance.py", line 55, in <module>
    widgetGraphiqueTendance = GraphiqueTendance()
  File "graphiqueTendance.py", line 40, in __init__
    tendance.setCurvesTitle('Curve A', ['sys/tg_test/1/long64_scalar'])
  File "/usr/local/lib/python2.7/dist-packages/taurus/qt/qtgui/plot/taurusplot.py", line 3466, in setCurvesTitle
    curve.setTitleText(titletext)
AttributeError: 'NoneType' object has no attribute 'setTitleText'