From fa33a4479d134d46a6dd11e657a1ee71edb23607 Mon Sep 17 00:00:00 2001 From: chrin Date: Mon, 21 Aug 2023 15:40:32 +0200 Subject: [PATCH] Added precision to and modified CAQTextEdit --- pvgateway.py | 6 +++++- pvwidgets.py | 50 ++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/pvgateway.py b/pvgateway.py index 89c0704..2f2acdb 100644 --- a/pvgateway.py +++ b/pvgateway.py @@ -708,12 +708,14 @@ class PVGateway(QWidget): def receive_monitor_dbr_time(self, pvdata, alarm_severity): - print("called from gateway", self.pv_name, alarm_severity) + print("called from gateway", self.pv_name, alarm_severity, flush=True) pvdata.show() def receive_monitor_update(self, value, status, alarm_severity): '''Triggered by monitor signal. For Widget to overload.''' + + self.mutex_post_display.lock() _current_qt_dynamic_property = self.qt_dynamic_property_get() @@ -765,6 +767,8 @@ class PVGateway(QWidget): '''Callback function to be invoked on change of pv value. cafe.getCache and cafe.set operations permitted within callback. ''' + + self.mutex.lock() pv_name = pvname diff --git a/pvwidgets.py b/pvwidgets.py index 109487f..08c1986 100644 --- a/pvwidgets.py +++ b/pvwidgets.py @@ -539,12 +539,14 @@ class CAQTextEntry(QLineEdit, PVGateway): trigger_monitor = Signal(object, int) trigger_connect = Signal(int, str, int) - def __init__(self, parent=None, pv_name: str = "", monitor_callback=None, + def __init__(self, parent=None, pv_name: str="", monitor_callback=None, pv_within_daq_group: bool = False, color_mode=None, - show_units=False, prefix: str = "", suffix: str = ""): + show_units=False, prefix: str="", suffix: str="", + precision: int=0): super().__init__(parent, pv_name, monitor_callback, pv_within_daq_group, color_mode, show_units, prefix, suffix, - connect_callback=self.py_connect_callback) + connect_callback=self.py_connect_callback, + precision=precision) self.is_initialize_complete() #waits a fraction of a second @@ -574,13 +576,21 @@ class CAQTextEntry(QLineEdit, PVGateway): def configure_widget(self): self.setFocusPolicy(Qt.StrongFocus) - fm = QFontMetricsF(QFont("Sans Serif", 12)) + + + f = QFont("Sans Serif") + f.setPixelSize(11) + + fm = QFontMetricsF(f) + qrect = fm.boundingRect(self.suggested_text) - _width_scaling_factor = 1.15 - - self.setFixedHeight((fm.lineSpacing()*1.8)) - self.setFixedWidth(((qrect.width()+10) * _width_scaling_factor)) + _width_scaling_factor = 1.2 + + + + self.setFixedHeight(18) #(fm.lineSpacing()*1.6)) + self.setFixedWidth((qrect.width()+20) * _width_scaling_factor) self.qt_property_initial_values(qt_object_name=self.PV_CONTROLLER) @@ -598,7 +608,7 @@ class CAQTextEntry(QLineEdit, PVGateway): else: valStr = ("{: .%sf}" % self.precision) strText = valStr.format(round(val, self.precision)) - print(strText, " precision ", self.precision) + #print(strText, " precision ", self.precision) self.setText(strText) else: #Do this for TextInfo cache @@ -643,7 +653,7 @@ class CAQTextEntry(QLineEdit, PVGateway): class CAQSpinBox(QSpinBox, PVGateway): - '''Channel access enabled QTextEntry widget''' + '''Channel access enabled QSpinBox widget''' trigger_monitor_float = Signal(float, int, int) trigger_monitor_int = Signal(int, int, int) trigger_monitor_str = Signal(str, int, int) @@ -1211,7 +1221,7 @@ class CAQTableWidget(QTableWidget): def widget_update(self): - + """ Called when self.notif_unison is True """ for _row, pvgate in enumerate(self.pv_gateway): if not pvgate.notify_unison: @@ -1304,6 +1314,8 @@ class CAQTableWidget(QTableWidget): self.item(_row, val_col_no).setBackground( QColor(pvgate.bg_readback)) + #self.item(_row, val_col_no).setBackground( + # QColor('#aeae66')) if self.show_timestamp: self.item(_row, ts_col_no).setBackground( QColor(pvgate.bg_readback)) @@ -1435,6 +1447,8 @@ class CAQTableWidget(QTableWidget): connect_triggers=False, notify_freq_hz=self.notify_freq_hz, notify_unison=self.notify_unison, precision=self.precision) + + self.pv_gateway[i].is_initialize_complete() self.pv_gateway[i].trigger_connect.connect( self.receive_connect_update) @@ -2085,14 +2099,20 @@ class CAQTableWidget(QTableWidget): value = value * self.scale_factor _value = self.pv_gateway[_row].format_display_value(value) + qtwi = QTableWidgetItem(str(_value) + " ") f = qtwi.font() f.setPointSize(8) qtwi.setFont(f) + qtwi.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) + #qtwi.setEditTriggers(QAbstractItemView.AllEditTriggers) self.setItem(_row, self.columns_dict['Value'], qtwi) + #self.item(_row, self.columns_dict['Value']).setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) + #self.item(_row, self.columns_dict['Value']).setEditTriggers(QAbstractItemView.AllEditTriggers) self.item(_row, self.columns_dict['Value']).setTextAlignment( Qt.AlignRight | Qt.AlignVCenter) - + + if 'Timestamp' in self.columns_dict.keys(): _handle = self.pv_gateway[_row].handle _pvd = self.pv_gateway[_row].cafe.getPVCache(_handle) @@ -2128,6 +2148,8 @@ class CAQTableWidget(QTableWidget): _prop = self.pv_gateway[_row].qt_dynamic_property_get() + + if _prop == self.pv_gateway[_row].READBACK_ALARM: if alarm_severity == self.pv_gateway[_row].cyca.SEV_MAJOR: @@ -2172,6 +2194,10 @@ class CAQTableWidget(QTableWidget): elif _prop == self.pv_gateway[_row].READBACK_STATIC: self.item(_row, self.columns_dict['Value']).setBackground( QColor(self.pv_gateway[_row].bg_readback)) + #self.item(_row, self.columns_dict['Value']).setBackground( + # QColor("#ffffe1")) + #self.item(_row, self.columns_dict['Value']).setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable) + if 'Timestamp' in self.columns_dict.keys(): self.item(_row, self.columns_dict['Timestamp']).setBackground( QColor(self.pv_gateway[_row].bg_readback))