From: Carlos P. <cpa...@ce...> - 2015-12-02 08:57:43
|
Hi, the changes seem ok to me, but the implementation has one problem: It assumesthat the "normal_name" returned by the validator is equivalent to the device name (and it psses it to setTable). But this is not always the case. The normal name may contain the DB name in it if it is not the default one. For example, in my system I have constrols02:10000 as my default DB, and the device cpascual/pysignalsimulator/1 is exported only in controls01 (not in controls02) then: This fails: ~~~~ python taurusdevicepropertytable.py \ tango://controls01:10000/cpascual/pysignalsimulator/1 ~~~~ This also fails: ~~~~ devenv python taurusdevicepropertytable.py \ --tango-host=controls01:10000 cpascual/pysignalsimulator/1 ~~~~ And this works: ~~~~ TANGO_HOST=controls01:10000 python taurusdevicepropertytable.py \ cpascual/pysignalsimulator/1 ~~~~ Apart from this, simply running `python taurusdevicepropertytable.py` I get this exception (the widget seems to work anyway): ~~~~ Traceback (most recent call last): File "/home/cpascual/src/taurus/lib/taurus/qt/qtgui/base/taurusbase.py", line 341, in filterEvent self.handleEvent(*evt) File "/home/cpascual/src/taurus/lib/taurus/qt/qtgui/base/taurusbase.py", line 1257, in handleEvent self._setText(text) TypeError: setText() takes exactly 4 arguments (2 given) ~~~~ Finally, it would be nice if you test the implementation on taurus4-preview as well (I haven't yet) Can you please resubmit addressing this problems? Note: if it is too much work, I think the current implementation is more or less ok and can be applied with just a TODO notifying of the currently known limitations Cheers, Carlos On Wed 11 November 2015 11:56:56 cfalcon wrote: > setModel of taurus.qt.qtgui.table.TaurusPropTable does not work. > > TaurusPropTable uses the inherit setModel method of TaurusBaseWidget > class that does not cover the funcionality of this widget. > > Implement a setModel method acording the specifications provided > by S.Rubio. > --- > .../qt/qtgui/table/taurusdevicepropertytable.py | 57 > ++++++++++++++-------- 1 file changed, 38 insertions(+), 19 > deletions(-) > > diff --git a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py > b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py index > 9901ec3..cc9722e 100644 > --- a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py > +++ b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py > @@ -31,14 +31,15 @@ __all__ = ["TaurusPropTable"] > > from taurus.external.qt import Qt, QtCore, QtGui > from taurus.qt.qtgui.base import TaurusBaseWidget > -import taurus.core > -import PyTango > +import taurus > +from taurus.core.taurusdevice import TaurusDevice > > class TaurusPropTable(QtGui.QTableWidget, TaurusBaseWidget): > ''' > This widget will show a list of properties of device and the list > of values. @todo add a frame for Add, Delete and Refresh buttons! > ''' > + # TODO This widget is Tango-centric > __pyqtSignals__ = ("modelChanged(const QString &)",) > > def __init__(self, parent=None, designMode = False): > @@ -59,6 +60,14 @@ class TaurusPropTable(QtGui.QTableWidget, > TaurusBaseWidget): > #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ > -~-~-~- # TaurusBaseWidget over writing methods > > #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ > -~-~-~- + def setModel(self, model): > + name_validator = TaurusDevice.getNameValidator() > + TaurusBaseWidget.setModel(self, model) > + try: > + _, normal_name, _ = name_validator.getNames(model) > + self.setTable(normal_name) > + except ValueError: > + self.debug('Wrong model!! %s' %(model)) > > def sizeHint(self): > return QtGui.QTableWidget.sizeHint(self) > @@ -67,7 +76,7 @@ class TaurusPropTable(QtGui.QTableWidget, > TaurusBaseWidget): return QtGui.QTableWidget.minimumSizeHint(self) > > def getModelClass(self): > - return taurus.core.taurusdatabase.TaurusDatabase > + return TaurusDevice > > @classmethod > def getQtDesignerPluginInfo(cls): > @@ -82,7 +91,7 @@ class TaurusPropTable(QtGui.QTableWidget, > TaurusBaseWidget): > #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ > -~-~-~- > > model = QtCore.pyqtProperty("QString", TaurusBaseWidget.getModel, > - TaurusBaseWidget.setModel, > + setModel, > TaurusBaseWidget.resetModel) > > useParentModel = QtCore.pyqtProperty("bool", > @@ -95,30 +104,37 @@ class TaurusPropTable(QtGui.QTableWidget, > TaurusBaseWidget): > #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~ > -~-~-~- > > @QtCore.pyqtSignature("setTable(QString)") > - def setTable(self,dev_name): > + def setTable(self, dev_name): > ''' > This method is used to connect TaurusPropTable widget with > TaurusClassTable widget This method fill the table with the names of > properties and values for the device selected in the TaurusClassTable > ''' > - > QtCore.QObject.disconnect(self,QtCore.SIGNAL("cellChanged(int,int)"), > self.valueChanged) - self.db = PyTango.Database() > + QtCore.QObject.disconnect(self, > QtCore.SIGNAL("cellChanged(int, int)"), + > self.valueChanged) > + self.db = taurus.Database() > dev_name = str(dev_name) > - self.list_prop = > list(self.db.get_device_property_list(dev_name,'*')) + > self.list_prop = list(self.db.get_device_property_list(dev_name, > '*')) self.setRowCount(len(self.list_prop)) > for i in range(0,len(self.list_prop)): > elem = self.list_prop[i] > self.setText(elem,i,0) > - > self.dictionary=self.db.get_device_property(dev_name,self.list_prop) > - self.debug('Getting %s properties: %s -> > %s'%(dev_name,self.list_prop,self.dictionary)) + > self.dictionary= self.db.get_device_property(dev_name, + > self.list_prop) + > self.debug('Getting %s properties: %s -> %s' %(dev_name, + > self.list_prop, + > > self.dictionary)) value=self.dictionary[elem] > - self.debug('TaurusPropsTable: property %s is type > %s'%(elem,type(value))) - USE_TABLES=False > + self.debug('TaurusPropsTable: property %s is type %s' > %(elem, + > type(value)) + ) > + USE_TABLES= False > if USE_TABLES: self.setPropertyValue(value,i,1) > else: > if not isinstance(value,str): #not something like an > string #if isinstance(value,list):#type(value) is list: heigh1 = > len(value) > - value = '\n'.join(str(v) for v in value) # adding > new lines in between elements in the list + # > adding new lines in between elements in the list + > value = '\n'.join(str(v) for v in value) self.setText(str(value),i,1) > > self.updateStyle() > @@ -372,12 +388,15 @@ class Delegate(QtGui.QItemDelegate): > return size > > if __name__ == '__main__': > - import sys,os > - app = QtGui.QApplication([]) > + import sys > + from taurus.qt.qtgui.application import TaurusApplication > + app = TaurusApplication(app_name="TaurusDevice property table") > widget = TaurusPropTable() > - args = sys.argv[1:] > - if not args: args = > ['tango/admin/%s'%(os.environ['TANGO_HOST'].split(':')[0])] - > widget.setTable(sys.args) > + args = sys.argv > + if len(args) == 1: > + model = 'sys/tg_test/1' > + else: > + model = str(args[1]) > + widget.setModel(model) > widget.show() > app.exec_() > - -- +----------------------------------------------------+ Carlos Pascual Izarra Scientific Software Coordinator Computing Division ALBA Synchrotron [http://www.albasynchrotron.es] Carrer de la Llum 2-26 E-08290 Cerdanyola del Valles (Barcelona), Spain E-mail: cpa...@ce... Phone: +34 93 592 4428 +----------------------------------------------------+ |