qgpib_plotter.py

changeset 23
cb97962a1ae9
parent 22
b2f4646161be
child 25
32d0d1cd44c3
equal deleted inserted replaced
22:b2f4646161be 23:cb97962a1ae9
1 # 1 #
2 2
3 from PyQt4 import QtGui, QtCore 3 import os, sys
4
5 from PyQt4 import QtGui, QtCore, uic
4 from PyQt4.QtCore import SIGNAL, Qt 6 from PyQt4.QtCore import SIGNAL, Qt
5 7
6 from gppib_plotter import GPIBplotter 8 from gpib_plotter import GPIBplotter
7 from hpgl_qt import QHPGLPlotterWidget 9 from hpgl_qt import QHPGLPlotterWidget
8 10
9 ORGANISATION="Logilab" 11 form_class, base_class = uic.loadUiType(os.path.join(os.path.dirname(__file__), "qhpgl_plotter.ui"))
10 APPLICATION="qgpib_plotter"
11 def variant(v):
12 _cvrts = {1: lambda x:x.toInt(),
13 10: lambda x:unicode(x.toString()),
14 }
15 t = v.userType()
16 12
17 class Preferences(object): 13 from qpreferences import PreferenceItem, AbstractPreferences, PreferencesEditor
18 _defaults = {'device': '/dev/ttyUSB0',
19 'address': 0,
20 }
21 def __init__(self):
22 self._settings = qc.QSettings(qc.QSettings.UserScope,
23 ORGANISATION, APPLICATION)
24 14
25 def getPref(self, key): 15 class Preferences(AbstractPreferences):
26 val = self._settings.value(key, QtCore.QVariant(self._defaults[key])) 16 ORGANISATION="Logilab"
17 APPLICATION="qgpib_plotter"
27 18
28 19 device = PreferenceItem('/dev/ttyUSB0', name=u'device', description=u'GPIB device')
29 class QtHPGLPlotter(QtGui.QMainWindow): 20 address = PreferenceItem(5, name=u'GPIB address')
21 _pos = PreferenceItem(basetype=QtCore.QPoint)
22 _size = PreferenceItem(basetype=QtCore.QSize)
23 _appState = PreferenceItem(basetype=QtCore.QByteArray)
24
25 class QtHPGLPlotter(QtGui.QMainWindow, form_class):
30 def __init__(self, parent=None): 26 def __init__(self, parent=None):
31 QtGui.QMainWindow.__init__(self, parent) 27 QtGui.QMainWindow.__init__(self, parent)
32 self.gpib_plotter = GPIBplotter( 28 self._plots = {}
29 self._prefs = Preferences()
30 self.setupUi()
31 self.initializeGPIB()
32 if self._prefs._pos:
33 self.move(self._prefs._pos)
34 if self._prefs._size:
35 self.resize(self._prefs._size)
36 if self._prefs._appState:
37 self.restoreState(self._prefs._appState)
33 38
39 def setupUi(self):
40 form_class.setupUi(self, self) # call qtdesigner generated form creation
41 # actions defined in designer
42 self.connect(self.actionPreferences, SIGNAL('triggered(bool)'),
43 self.preferencesTriggered)
44 self.connect(self.actionQuit, SIGNAL('triggered(bool)'),
45 self.quitTriggered)
46 self.connect(self.actionOpen, SIGNAL('triggered(bool)'),
47 self.openTriggered)
48 self.connect(self.actionSave, SIGNAL('triggered(bool)'),
49 self.saveTriggered)
50 self.connect(self.actionSaveAs, SIGNAL('triggered(bool)'),
51 self.saveAsTriggered)
52
53 self.plotterWidget = QHPGLPlotterWidget(self)
54 self.setCentralWidget(self.plotterWidget)
55
56 self.connect(self.captureButton, SIGNAL("toggled(bool)"),
57 self.captureToggled)
58
59 self._plots_list = QtGui.QStringListModel()
60 self.plotsView.setModel(self._plots_list)
61 self.connect(self.plotsView, SIGNAL('activated(const QModelIndex&)'),
62 self.currentPlotChanged)
63 self.connect(self.plotsView.selectionModel(),
64 SIGNAL('currentChanged(const QModelIndex&, const QModelIndex&)'),
65 self.currentPlotChanged)
66
67 def currentPlotChanged(self, index, old_index=None):
68 if index.isValid():
69 value = unicode(self.plotsView.model().data(index, Qt.DisplayRole).toString())
70
71 #self.plotterWidget = QHPGLPlotterWidget(self)
72 #self.setCentralWidget(self.plotterWidget)
73 self.plotterWidget.clear()
74 self.plotterWidget.parse(self._plots[value])
75
76 def preferencesTriggered(self, checked=False):
77 PreferencesEditor(self._prefs, self).exec_()
78
79 def quitTriggered(self, checked=False):
80 self.close()
81
82 def closeEvent(self, event):
83 if 1:
84 #if self.promptForSave():
85 self._prefs._pos = self.pos()
86 self._prefs._size = self.size()
87 self._prefs._appState = self.saveState()
88 event.accept()
89 else:
90 event.ignore()
34 91
92 def openTriggered(self, checked=False):
93 filenames = QtGui.QFileDialog.getOpenFileNames(self, "Open a HPGL file to display", '.', 'HPGL files (*.plt)\nAll files (*)')
94 for filename in filenames:
95 filename = str(filename)
96 if os.path.exists(filename):
97 data = open(filename).read()
98 name = os.path.basename(filename)
99 name = os.path.splitext(name)[0]
100 lst = self.plotsView.model().stringList()
101 lst.append(name)
102 self._plots[name] = data
103 self.plotsView.model().setStringList(lst)
104 #self.plotsView.setCurrentIndex(self.plotsView.model().index(self.plotsView.model().stringList().count(), 0))
105
106
107
108 def saveTriggered(self, checked=False):
109 print "save"
110 def saveAsTriggered(self, checked=False):
111 print "saveAs"
112
113 def initializeGPIB(self):
114 try:
115 self.gpib_plotter = GPIBplotter(device=self._prefs.device,
116 address=self._prefs.address,
117 )
118 except:
119 self.gpib_plotter = None
120 self._online = False
121 self.setCaptureLed()
122
123 def captureToggled(self, state):
124 if state:
125 if self.gpib_plotter is None:
126 self.initializeGPIB()
127 if self.gpib_plotter is None:
128 QtGui.QMessageBox.critical(self, self.tr("GPIB error"),
129 self.tr("<b>Unable to initialize GPIB connection</b>.<br>Please check your GPIB dongle and settings."))
130 self._online = False
131 else:
132 # todo
133 self._online = True
134 else:
135 self._online = False
136 self.setCaptureLed()
137
138
139 def setCaptureLed(self):
140 if self._online:
141 icn = QtGui.QIcon(':/icons/led_green.png')
142 else:
143 icn = QtGui.QIcon(':/icons/led_green_off.png')
144 self.captureButton.setIcon(icn)
145 self.captureButton.setChecked(self._online)
146
147 if __name__ == '__main__':
148 a = QtGui.QApplication([])
149 w = QtHPGLPlotter()
150 w.show()
151 a.exec_()
152

mercurial