def __init__(self, parent=None, pvname=''): QtGui.QWidget.__init__(self, parent) name_label = QtGui.QLabel("PV Name:") self.pvname = QtGui.QLineEdit(pvname) self.pvname.returnPressed.connect(self.onPVNameReturn) #self.pvname.editingFinished.connect(self.onPVNameReturn) value_label = QtGui.QLabel("PV Value:") self.value = CaQLabel() status_label = QtGui.QLabel("status:") self.status = QtGui.QLabel("just starting") self.status_text = '' content_label = QtGui.QLabel("content:") self.content = QtGui.QLabel("just starting") self.content_text = '' self.sig_status = CaQSignalDef() self.sig_status.newText.connect(self.SetStatus) self.sig_content = CaQSignalDef() self.sig_content.newText.connect(self.SetContent) grid = QtGui.QGridLayout() grid.addWidget(name_label, 0, 0) grid.addWidget(self.pvname, 0, 1) grid.addWidget(value_label, 1, 0) grid.addWidget(self.value, 1, 1) grid.addWidget(status_label, 2, 0) grid.addWidget(self.status, 2, 1) grid.addWidget(content_label, 3, 0) grid.addWidget(self.content, 3, 1) self.setLayout(grid) self.setWindowTitle("Demo PV object") if len(pvname)>0: self.onPVNameReturn()
class DemoView(QtGui.QWidget): ''' Show an EPICS PV connection. Allow it to connect and disconnect. This is a variation of EPICS PV Probe. ''' def __init__(self, parent=None, pvname=''): QtGui.QWidget.__init__(self, parent) name_label = QtGui.QLabel("PV Name:") self.pvname = QtGui.QLineEdit(pvname) self.pvname.returnPressed.connect(self.onPVNameReturn) #self.pvname.editingFinished.connect(self.onPVNameReturn) value_label = QtGui.QLabel("PV Value:") self.value = CaQLabel() status_label = QtGui.QLabel("status:") self.status = QtGui.QLabel("just starting") self.status_text = '' content_label = QtGui.QLabel("content:") self.content = QtGui.QLabel("just starting") self.content_text = '' self.sig_status = CaQSignalDef() self.sig_status.newText.connect(self.SetStatus) self.sig_content = CaQSignalDef() self.sig_content.newText.connect(self.SetContent) grid = QtGui.QGridLayout() grid.addWidget(name_label, 0, 0) grid.addWidget(self.pvname, 0, 1) grid.addWidget(value_label, 1, 0) grid.addWidget(self.value, 1, 1) grid.addWidget(status_label, 2, 0) grid.addWidget(self.status, 2, 1) grid.addWidget(content_label, 3, 0) grid.addWidget(self.content, 3, 1) self.setLayout(grid) self.setWindowTitle("Demo PV object") if len(pvname)>0: self.onPVNameReturn() def onPVNameReturn(self, *args, **kw): self.value.connect(self.pvname.text(), ca_callback=self.pv_update, ca_connect_callback=self.connect_update) def connect_update(self, **kw): self.status_text = {True: 'connected', False: 'disconnected'}[ kw['conn'] ] self.sig_status.newText.emit() def pv_update(self, **kw): print 'pv_update!! ', kw self.content_text = "updated:" + str(kw['timestamp']) self.sig_content.newText.emit() def SetStatus(self, *args, **kw): self.status.setText(self.status_text) def SetContent(self, *args, **kw): self.content.setText(self.content_text)