From 5c9f17bce39ce25255fc6f22cb9816ee1968fdfa Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:27:50 +0100 Subject: [PATCH 01/19] bugfix: attribute was of wrong kind for which the successive call raised an exception --- QtPyLoT.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index bc973612..1c23fa7a 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -357,16 +357,23 @@ class MainWindow(QMainWindow): def filterWaveformData(self): if self.getData(): + def hasfreq(kwargs): + for key in kwargs.keys(): + if not key.startswith('freq'): + return True + return False kwargs = {} freq = self.getFilterOptions().getFreq() - if len(freq) > 1: + if freq is not None and len(freq) > 1: kwargs['freqmin'] = freq[0] kwargs['freqmax'] = freq[1] - else: + elif freq is not None and len(freq) == 1: kwargs['freq'] = freq - kwargs['type'] = self.getFilterOptions().getFilterType() - kwargs['corners'] = self.filteroptions.getOrder() - self.getData().filter(kwargs) + + if hasfreq(kwargs): + kwargs['type'] = self.getFilterOptions().getFilterType() + kwargs['corners'] = self.getFilterOptions().getOrder() + self.getData().filter(kwargs) def adjustFilterOptions(self): filteroptions = None From 82ac85d743a19244968b044c956b1c6fdb3b8678 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:30:24 +0100 Subject: [PATCH 02/19] bugfix: return value of QFileDialog method calls must be handled carefully --- QtPyLoT.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index 1c23fa7a..35e036a2 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -298,7 +298,10 @@ class MainWindow(QMainWindow): "Select waveform " "files:", dir=searchPath) - self.fnames = fnames + if isinstance(fnames[0], list): + self.fnames = fnames[0] + else: + self.fnames = fnames else: raise DatastructureError('not specified') @@ -319,7 +322,7 @@ class MainWindow(QMainWindow): except FormatError: return False except AttributeError: - fname, = QFileDialog.getSaveFileName(self, 'Save event') + fname = QFileDialog.getSaveFileName(self, 'Save event') self.data.exportEvent(fname, exform) return True From 1878b887f67de12d653faa736255ac161edf8b0c Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:31:35 +0100 Subject: [PATCH 03/19] give information on files which could not be read and thus not be attended to the waveform container --- pylot/core/read/data.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index e6048ee8..7b8a3f94 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -134,13 +134,28 @@ class Data(object): self.dirty = False def appendWFData(self, fnames): + if self.dirty is not False: self.resetWFData() + + assert isinstance(fnames, list), "input parameter 'fnames' is " \ + "supposed to be of type 'list' " \ + "but is actually".format(type( + fnames)) + + warnmsg = '' for fname in fnames: try: self.wfdata += read(fname) except TypeError: - self.wfdata += read(fname, format='GSE2') + try: + self.wfdata += read(fname, format='GSE2') + except Exception: + warnmsg += '{0}\n'.format(fname) + if warnmsg: + warnmsg = 'WARNING: unable to read\n' + warnmsg + print warnmsg + def getWFData(self): return self.wfdata From dd360bd9cc4cffa2fed7707a08aa7ab1b73ca09d Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:32:01 +0100 Subject: [PATCH 04/19] code clean up --- pylot/core/read/data.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index 7b8a3f94..3cdc5d67 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -366,6 +366,5 @@ class SeiscompDataStructure(object): self.getFields()['NET'], self.getFields()['STA'], fullChan, - '*{0}'.format(self.getFields()['DAY']) - ) + '*{0}'.format(self.getFields()['DAY'])) return dataPath From 693362a278f6d5f43a86d5db27470a27f8d5b714 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:32:37 +0100 Subject: [PATCH 05/19] normalize waveform data to avoid overlapping --- pylot/core/read/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index 3cdc5d67..52b9d9fe 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -104,7 +104,7 @@ class Data(object): nsamp = len(trace.data) tincr = trace.stats.delta time_ax = np.arange(stime, nsamp / srate, tincr) - trace.normalize() + trace.normalize(trace.data.max() * 2) widget.axes.plot(time_ax, trace.data + n, 'k') xlabel = 'seconds since {0}'.format(self.getCutTimes()[0]) ylabel = '' From abbe9cb2c43631b9b0e56c1eecd9b72480d2eae8 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:34:21 +0100 Subject: [PATCH 06/19] bugfix: missed to call get method before trying to fetch an item --- pylot/core/util/widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 601c6d6e..03c0abab 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -307,7 +307,7 @@ class FilterOptionsDialog(QDialog): self.freqminSpinBox.setRange(5e-7, 1e6) self.freqminSpinBox.setDecimals(2) self.freqminSpinBox.setSuffix(' Hz') - self.freqminSpinBox.setValue(self.getFilterOptions().getFreq[0]) + self.freqminSpinBox.setValue(self.getFilterOptions().getFreq()[0]) self.freqmaxLabel = QLabel() self.freqmaxLabel.setText("maximum:") self.freqmaxSpinBox = QDoubleSpinBox() @@ -315,7 +315,7 @@ class FilterOptionsDialog(QDialog): self.freqmaxSpinBox.setDecimals(2) self.freqmaxSpinBox.setSuffix(' Hz') if self.filterOptions.filterType in ['bandpass', 'bandstop']: - self.freqmaxSpinBox.setValue(self.getFilterOptions().getFreq[1]) + self.freqmaxSpinBox.setValue(self.getFilterOptions().getFreq()[1]) typeOptions = ["bandpass", "bandstop", "lowpass", "highpass"] From cdb8af56b3871f7feb8dfaca49ccb7b9782a16d6 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:35:12 +0100 Subject: [PATCH 07/19] bugfix: avoid empty parts of the data display --- pylot/core/util/widgets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 03c0abab..e6905c11 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -52,6 +52,7 @@ class MPLWidget(FigureCanvas): self.figure = Figure() self.canvas = FigureCanvas(self.figure) self.axes = self.figure.add_subplot(111) + self.axes.autoscale(tight=True) self.updateWidget(xlabel, ylabel, title) From 757a6d784bcf04614e0adf1147705de4ae137cf9 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Wed, 18 Feb 2015 15:35:54 +0100 Subject: [PATCH 08/19] better use call to the classes method then returning a value --- pylot/core/util/widgets.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index e6905c11..9c417772 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -110,8 +110,7 @@ class PropertiesDlg(QDialog): def accept(self, *args, **kwargs): self.apply() - self.destroy() - return self.accepted + QDialog.accept(self) def apply(self): for widint in range(self.tabWidget.count()): From 5496b2deaa210b565f62c8ddc013b3982f3da274 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:28:24 +0100 Subject: [PATCH 09/19] bugfix: use get and set methods instead of directly changes values of attributes --- pylot/core/util/widgets.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 9c417772..a070b9c8 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -314,7 +314,7 @@ class FilterOptionsDialog(QDialog): self.freqmaxSpinBox.setRange(5e-7, 1e6) self.freqmaxSpinBox.setDecimals(2) self.freqmaxSpinBox.setSuffix(' Hz') - if self.filterOptions.filterType in ['bandpass', 'bandstop']: + if self.getFilterOptions().getFilterType() in ['bandpass', 'bandstop']: self.freqmaxSpinBox.setValue(self.getFilterOptions().getFreq()[1]) typeOptions = ["bandpass", "bandstop", "lowpass", "highpass"] @@ -369,10 +369,10 @@ class FilterOptionsDialog(QDialog): self.freqmaxLabel.setEnabled(True) self.freqmaxSpinBox.setEnabled(True) - self.filterOptions.filterType = self.selectTypeCombo.currentText() + self.getFilterOptions().setFilterType(self.selectTypeCombo.currentText()) freq = [] freq.append(self.freqminSpinBox.value()) - if self.filterOptions.filterType in ['bandpass', 'bandstop']: + if self.getFilterOptions().getFilterType() in ['bandpass', 'bandstop']: if self.freqminSpinBox.value() > self.freqmaxSpinBox.value(): QMessageBox.warning(self, "Value error", "Maximum frequency must be at least the " @@ -382,8 +382,8 @@ class FilterOptionsDialog(QDialog): self.freqmaxSpinBox.setFocus() return freq.append(self.freqmaxSpinBox.value()) - self.filterOptions.freq = freq - self.filterOptions.order = self.orderSpinBox.value() + self.getFilterOptions().setFreq(freq) + self.getFilterOptions().setOrder(self.orderSpinBox.value()) def getFilterOptions(self): return self.filterOptions From 35c184ede7e64a1394f6aa8c466269211a6c719b Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:30:17 +0100 Subject: [PATCH 10/19] bugfix: in order to be able to check for checkable these should be available in the namespace, thus these actions have been set as attributes of the MainWindow object --- QtPyLoT.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index 35e036a2..b1721828 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -150,7 +150,7 @@ class MainWindow(QMainWindow): QCoreApplication.instance().quit, QKeySequence.Close, quitIcon, "Close event and quit PyLoT") - filterAction = self.createAction("&Filter ...", self.filterWaveformData, + self.filterAction = self.createAction("&Filter ...", self.filterWaveformData, "Ctrl+F", QIcon(":/filter.png"), """Toggle un-/filtered waveforms to be displayed, according to the @@ -159,10 +159,10 @@ class MainWindow(QMainWindow): self.adjustFilterOptions, "Alt+F", QIcon(None), """Adjust filter parameters.""") - selectPAction = self.createAction("&P", self.alterPhase, "Alt+P", + self.selectPAction = self.createAction("&P", self.alterPhase, "Alt+P", QIcon(":/picon.png"), "Toggle P phase.", True) - selectSAction = self.createAction("&S", self.alterPhase, "Alt+S", + self.selectSAction = self.createAction("&S", self.alterPhase, "Alt+S", QIcon(":/sicon.png"), "Toggle S phase", True) printAction = self.createAction("&Print event ...", @@ -182,8 +182,9 @@ class MainWindow(QMainWindow): self.updateFileMenu() self.editMenu = self.menuBar().addMenu('&Edit') - editActions = (filterAction, filterEditAction, None, selectPAction, - selectSAction, None, printAction) + editActions = (self.filterAction, filterEditAction, None, + self.selectPAction, self.selectSAction, None, + printAction) self.addMenuActions(self.editMenu, editActions) self.helpMenu = self.menuBar().addMenu('&Help') From 7dd1519f838bb665c9fe057813c1583a12d8dc19 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:35:26 +0100 Subject: [PATCH 11/19] use similar method names for similar types of methods (e.g. xWFData for all methods connected to waveform data) --- QtPyLoT.py | 4 +++- pylot/core/read/data.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index b1721828..58fd58b7 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -357,7 +357,7 @@ class MainWindow(QMainWindow): self.plotWaveformData() def plotWaveformData(self): - self.getData().plotData(self.getDataWidget()) + self.getData().plotWFData(self.getDataWidget()) def filterWaveformData(self): if self.getData(): @@ -378,6 +378,8 @@ class MainWindow(QMainWindow): kwargs['type'] = self.getFilterOptions().getFilterType() kwargs['corners'] = self.getFilterOptions().getOrder() self.getData().filter(kwargs) + self.getData().filterWFData(kwargs) + self.getData().resetWFData() def adjustFilterOptions(self): filteroptions = None diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index 52b9d9fe..95b33700 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -95,7 +95,7 @@ class Data(object): raise KeyError('''{0} export format not implemented: {1}'''.format(evtformat, e)) - def plotData(self, widget): + def plotWFData(self, widget): wfst = self.getWFData().select(component=self.getComp()) for n, trace in enumerate(wfst): stime = trace.stats.starttime - self.getCutTimes()[0] @@ -121,7 +121,7 @@ class Data(object): except: return 'smi:bug/pylot/1234' - def filter(self, kwargs): + def filterWFData(self, kwargs): self.getWFData().filter(**kwargs) self.dirty = True From b10d8606cc8cf43008fa5ec47bdf2b356cc1b5e5 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:36:20 +0100 Subject: [PATCH 12/19] at least print error messages to screen (helps debugging ^^) --- QtPyLoT.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index 58fd58b7..4efdcff4 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -322,8 +322,10 @@ class MainWindow(QMainWindow): self.data.exportEvent(self.fname, exform) except FormatError: return False - except AttributeError: + except AttributeError, e: + print 'warning: {0}'.format(e) fname = QFileDialog.getSaveFileName(self, 'Save event') + fname = fname[0] self.data.exportEvent(fname, exform) return True From 4344a7c8a686e0bde3f384f4abee484619ca910e Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:37:21 +0100 Subject: [PATCH 13/19] unnecessary code overhead; return type is clear anyway (different return type for PyQt!!!) --- QtPyLoT.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index 4efdcff4..adda0de4 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -299,10 +299,7 @@ class MainWindow(QMainWindow): "Select waveform " "files:", dir=searchPath) - if isinstance(fnames[0], list): - self.fnames = fnames[0] - else: - self.fnames = fnames + self.fnames = fnames[0] else: raise DatastructureError('not specified') From 4184fcffdc9391542e271cfad8c3927b435fcf23 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Fri, 20 Feb 2015 08:38:26 +0100 Subject: [PATCH 14/19] make waveform filtering work (in progress) --- QtPyLoT.py | 27 +++++++++++++++------------ pylot/core/read/data.py | 12 ++++-------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index adda0de4..bedca1c7 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -365,20 +365,21 @@ class MainWindow(QMainWindow): if not key.startswith('freq'): return True return False - kwargs = {} - freq = self.getFilterOptions().getFreq() - if freq is not None and len(freq) > 1: - kwargs['freqmin'] = freq[0] - kwargs['freqmax'] = freq[1] - elif freq is not None and len(freq) == 1: - kwargs['freq'] = freq - - if hasfreq(kwargs): - kwargs['type'] = self.getFilterOptions().getFilterType() - kwargs['corners'] = self.getFilterOptions().getOrder() - self.getData().filter(kwargs) + if self.filterAction.isChecked(): + kwargs = {} + freq = self.getFilterOptions().getFreq() + if freq is not None and len(freq) > 1: + kwargs['freqmin'] = freq[0] + kwargs['freqmax'] = freq[1] + elif freq is not None and len(freq) == 1: + kwargs['freq'] = freq + if hasfreq(kwargs): + kwargs['type'] = self.getFilterOptions().getFilterType() + kwargs['corners'] = self.getFilterOptions().getOrder() self.getData().filterWFData(kwargs) + else: self.getData().resetWFData() + self.plotWaveformData() def adjustFilterOptions(self): filteroptions = None @@ -412,6 +413,8 @@ class MainWindow(QMainWindow): emsg.showMessage('Error: {0}'.format(e)) else: self.updateStatus('Filter loaded ...') + if self.filterAction.isChecked(): + self.filterWaveformData() def getSeismicPhase(self): return self.seismicPhase diff --git a/pylot/core/read/data.py b/pylot/core/read/data.py index 95b33700..1af5a0ea 100644 --- a/pylot/core/read/data.py +++ b/pylot/core/read/data.py @@ -130,18 +130,15 @@ class Data(object): self.wforiginal = None if fnames is not None: self.appendWFData(fnames) - self.orig = self.getWFData().copy() + self.wforiginal = self.getWFData().copy() self.dirty = False def appendWFData(self, fnames): - - if self.dirty is not False: - self.resetWFData() - assert isinstance(fnames, list), "input parameter 'fnames' is " \ "supposed to be of type 'list' " \ - "but is actually".format(type( - fnames)) + "but is actually".format(type(fnames)) + if self.dirty: + self.resetWFData() warnmsg = '' for fname in fnames: @@ -156,7 +153,6 @@ class Data(object): warnmsg = 'WARNING: unable to read\n' + warnmsg print warnmsg - def getWFData(self): return self.wfdata From cc002c946017cf6943eb6524dc5f3fafd4b32f83 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Mon, 23 Feb 2015 14:35:00 +0100 Subject: [PATCH 15/19] bugfix: wrong return type expectation corrected --- QtPyLoT.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index bedca1c7..707f772b 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -265,10 +265,10 @@ class MainWindow(QMainWindow): filt = "Supported event formats (*.mat *.qml *.xml " \ "*.kor *.evt)" caption = 'Select event to open' - fname, = QFileDialog().getOpenFileName(self, + fname = QFileDialog().getOpenFileName(self, caption=caption, filter=filt) - self.fname = fname + self.fname = fname[0] else: self.fname = unicode(action.data().toString()) if not self.okToContinue(): From d4d464d400c865db869c4097bdb56c5c109149b6 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Mon, 23 Feb 2015 14:38:26 +0100 Subject: [PATCH 16/19] generalized method addActions in order to be more flexible in adding actions to different QtObject types --- QtPyLoT.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index 707f772b..da3bbaa9 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -335,12 +335,12 @@ class MainWindow(QMainWindow): def getDataWidget(self): return self.DataPlot - def addMenuActions(self, menu, actions): + def addActions(self, target, actions): for action in actions: if action is None: - menu.addSeparator() + target.addSeparator() else: - menu.addAction(action) + target.addAction(action) def okToContinue(self): if self.dirty: From cb114dc696bfdba9ad818d7866e686777a1fd966 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Mon, 23 Feb 2015 14:45:47 +0100 Subject: [PATCH 17/19] bugfix: displayed status message has not been updated properly --- QtPyLoT.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index da3bbaa9..a7388d67 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -436,10 +436,8 @@ class MainWindow(QMainWindow): else: self.setWindowTitle( "PyLoT - seismic processing the python way[*]") - self.setWindowTitle("PyLoT - seismic processing the python way[*]") self.setWindowModified(self.dirty) - self.statusBar().showMessage(message, 5000) def printEvent(self): pass From d9b685eebb20b4494eedd30af3c6f67258457ad4 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Mon, 23 Feb 2015 14:46:18 +0100 Subject: [PATCH 18/19] display more detailed status messages --- QtPyLoT.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index a7388d67..b5918fe9 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -412,7 +412,8 @@ class MainWindow(QMainWindow): emsg = QErrorMessage(self) emsg.showMessage('Error: {0}'.format(e)) else: - self.updateStatus('Filter loaded ...') + self.updateStatus('Filter loaded ... ' + '[{0}: {1} Hz]'.format(self.getFilterOptions().getFilterType(), self.getFilterOptions().getFreq())) if self.filterAction.isChecked(): self.filterWaveformData() @@ -424,6 +425,8 @@ class MainWindow(QMainWindow): def setSeismicPhase(self, phase): self.seismicPhase = self.seismicPhaseButtonGroup.getValue() + self.updateStatus('Seismic phase changed to ' + '{0}'.format(self.getSeismicPhase())) def updateStatus(self, message): self.statusBar().showMessage(message, 5000) From c5f9842c37d92c162514d554a5f6578f1bd9eb68 Mon Sep 17 00:00:00 2001 From: Sebastian Wehling-Benatelli Date: Mon, 23 Feb 2015 14:47:38 +0100 Subject: [PATCH 19/19] added a toolbar (work in progress) --- QtPyLoT.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/QtPyLoT.py b/QtPyLoT.py index b5918fe9..4b86514a 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -185,11 +185,21 @@ class MainWindow(QMainWindow): editActions = (self.filterAction, filterEditAction, None, self.selectPAction, self.selectSAction, None, printAction) - self.addMenuActions(self.editMenu, editActions) + self.addActions(self.editMenu, editActions) self.helpMenu = self.menuBar().addMenu('&Help') helpActions = (helpAction, ) - self.addMenuActions(self.helpMenu, helpActions) + self.addActions(self.helpMenu, helpActions) + + fileToolBar = self.addToolBar("FileTools") + fileToolActions = (newEventAction, openEventAction, saveEventAction) + fileToolBar.setObjectName("FileTools") + self.addActions(fileToolBar, fileToolActions) + + phaseToolBar = self.addToolBar("PhaseTools") + phaseToolActions = (self.selectPAction, self.selectSAction) + phaseToolBar.setObjectName("PhaseTools") + self.addActions(phaseToolBar, phaseToolActions) self.eventLabel = QLabel() self.eventLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)