From: Grzegorz K. <g.k...@uj...> - 2016-08-01 10:29:31
|
Hi Carlos, Thank you very much! Your solution works flawlessly. I have created a ticket: https://sourceforge.net/p/tauruslib/tickets/331/ Again, thank you for help! On 07/28/2016 12:24 PM, Carlos Manuel Falcon Torres wrote: > Hi Grzegorz, > The actual TaurusLabelEditRW can not allow this "feature", the method > setValidator is there because it comes from Qt widgets. > TaurusLabelEditRW uses the TaurusLineEdit as writewidget and it > overwrites the used validator in each event. > TaurusLineEdit creates the validator each time attending the attribute > range, that is the reason because your solution does not work. > > That I propose you is an ugly workaround : > > The workaround consists in create your own TaurusLineEdit widget and > overwrite the "_updateValidator" method. > > Unfortunately these classes are not documented so I hope this example > can help you. > > import sys > > from taurus.external.qt import QtGui > > from taurus.qt.qtgui.application import TaurusApplication > from taurus.qt.qtgui.input import TaurusValueLineEdit > from taurus.qt.qtgui.compact import TaurusLabelEditRW > > > class MyTaurusValueLineEdit(TaurusValueLineEdit): > # Reimplement _updateValidator method > def _updateValidator(self, attrinfo): > pass > > > app = TaurusApplication() > > f = TaurusLabelEditRW(writeWClass=MyTaurusValueLineEdit) > f.model = 'sys/tg_test/1/double_scalar_w' > validator = QtGui.QDoubleValidator(10, 20, 5) > f.writeWidget.setValidator(validator) > > f.show() > sys.exit(app.exec_()) > > > The other option is somehow in your widget update dynamically the range > of your attribute. > > > Could you create a ticket in taurus [1] to discuss a proper solution for > taurus? > > [1] https://sourceforge.net/p/tauruslib/tickets/ > > > Best, > Carlos > > > On 07/27/2016 07:36 PM, Grzegorz Kowalski wrote: >> Hello, >> I have a problem with TaurusLabelEditRW, I need to validate its input to >> only set values inside certain range, but I don't know how to stop it >> from setting an attribute value when it's invalid. >> >> My first try was to use QDoubleValidator with TaurusValueLineEdit that >> is a part of RW widget, but it seems to ignore validator despite it's >> based on QLineEdit. >> >> code: >> rw = TaurusLabelEditRW() >> validator = QDoubleValidator(100, 300, 5) >> for c in rw.children(): >> if c.__class__.__name__ == "TaurusValueLineEdit": >> c.setValidator(self.validator) >> >> Second try was to connect to returnPressed signal of the line edit, and >> check the value, but I have no idea on how to prevent setting invalid >> value to the attribute. >> >> The range can't be just Tango attribute's max and min values because it >> is dependent on other parameters. >> I'm using Taurus 3.7.0. >> >> Thank you for any help! > -- Pozdrawiam / Kind regards, Grzegorz Kowalski Control systems engineer __________________________ National Synchrotron Radiation Centre SOLARIS Jagiellonian University Czerwone Maki 98, 30-392 Kraków, room 2.38 mobile: 0048 511 979 750 |