From 93942f7e3cce4a01b78564789febe320cd38a39d Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Tue, 28 May 2019 13:41:37 +0200 Subject: [PATCH 01/13] Initial commit - PyQt5 gui --- gui/main.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 gui/main.py diff --git a/gui/main.py b/gui/main.py new file mode 100644 index 000000000..f8a57c447 --- /dev/null +++ b/gui/main.py @@ -0,0 +1,37 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +import sys +from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication +from PyQt5.QtGui import QIcon +import numpy as np + +class Main(QMainWindow): + + def __init__(self): + super().__init__() + + self.initUI() + + + def initUI(self): + + exitAct = QAction(QIcon('exit.png'), '&Exit', self) + exitAct.setStatusTip('Exit application') + exitAct.triggered.connect(qApp.quit) + + self.statusBar() + + menubar = self.menuBar() + fileMenu = menubar.addMenu('&File') + fileMenu.addAction(exitAct) + + self.setGeometry(300,300,300,200) + self.setWindowTitle('Simple menu') + self.show() + +if __name__ == '__main__': + + app = QApplication(sys.argv) + main = Main() + sys.exit(app.exec_()) From 79bd75886651585d817731ce49d53cb5ed7d73a1 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Sun, 9 Jun 2019 20:12:46 +0200 Subject: [PATCH 02/13] Basic HERMES HRF spectrum overview and spectral viewer --- gui/filter.py | 34 +++++++++++++++ gui/filter.ui | 46 ++++++++++++++++++++ gui/gui.py | 74 +++++++++++++++++++++++++++++++ gui/gui.ui | 97 +++++++++++++++++++++++++++++++++++++++++ gui/main.py | 118 +++++++++++++++++++++++++++++++++++++++++--------- 5 files changed, 349 insertions(+), 20 deletions(-) create mode 100644 gui/filter.py create mode 100644 gui/filter.ui create mode 100644 gui/gui.py create mode 100644 gui/gui.ui diff --git a/gui/filter.py b/gui/filter.py new file mode 100644 index 000000000..90a63a77a --- /dev/null +++ b/gui/filter.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'filter.ui' +# +# Created by: PyQt5 UI code generator 5.6 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_FilterDialog(object): + def setupUi(self, FilterDialog): + FilterDialog.setObjectName("FilterDialog") + FilterDialog.resize(1130, 757) + self.verticalLayout = QtWidgets.QVBoxLayout(FilterDialog) + self.verticalLayout.setObjectName("verticalLayout") + self.FiltertableView = QtWidgets.QTableView(FilterDialog) + self.FiltertableView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) + self.FiltertableView.setEditTriggers(QtWidgets.QAbstractItemView.AnyKeyPressed|QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed|QtWidgets.QAbstractItemView.SelectedClicked) + self.FiltertableView.setAlternatingRowColors(False) + self.FiltertableView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) + self.FiltertableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + self.FiltertableView.setObjectName("FiltertableView") + self.FiltertableView.horizontalHeader().setSortIndicatorShown(False) + self.FiltertableView.horizontalHeader().setStretchLastSection(True) + self.verticalLayout.addWidget(self.FiltertableView) + + self.retranslateUi(FilterDialog) + QtCore.QMetaObject.connectSlotsByName(FilterDialog) + + def retranslateUi(self, FilterDialog): + _translate = QtCore.QCoreApplication.translate + FilterDialog.setWindowTitle(_translate("FilterDialog", "Dialog")) + diff --git a/gui/filter.ui b/gui/filter.ui new file mode 100644 index 000000000..5bb33842c --- /dev/null +++ b/gui/filter.ui @@ -0,0 +1,46 @@ + + + FilterDialog + + + + 0 + 0 + 1130 + 757 + + + + Dialog + + + + + + QAbstractScrollArea::AdjustIgnored + + + QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked + + + false + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + true + + + + + + + + diff --git a/gui/gui.py b/gui/gui.py new file mode 100644 index 000000000..e166434ce --- /dev/null +++ b/gui/gui.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'gui.ui' +# +# Created by: PyQt5 UI code generator 5.6 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1097, 800) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setAutoFillBackground(False) + self.centralwidget.setObjectName("centralwidget") + self.main_layout = QtWidgets.QGridLayout(self.centralwidget) + self.main_layout.setObjectName("main_layout") + self.buttonframe = QtWidgets.QFrame(self.centralwidget) + self.buttonframe.setFrameShape(QtWidgets.QFrame.NoFrame) + self.buttonframe.setFrameShadow(QtWidgets.QFrame.Plain) + self.buttonframe.setObjectName("buttonframe") + self.button_layout = QtWidgets.QHBoxLayout(self.buttonframe) + self.button_layout.setObjectName("button_layout") + self.Button_filter = QtWidgets.QPushButton(self.buttonframe) + self.Button_filter.setObjectName("Button_filter") + self.button_layout.addWidget(self.Button_filter) + self.Button_plot = QtWidgets.QPushButton(self.buttonframe) + self.Button_plot.setObjectName("Button_plot") + self.button_layout.addWidget(self.Button_plot) + self.main_layout.addWidget(self.buttonframe, 0, 0, 1, 1) + self.matplotlib = QtWidgets.QWidget(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.matplotlib.sizePolicy().hasHeightForWidth()) + self.matplotlib.setSizePolicy(sizePolicy) + self.matplotlib.setAutoFillBackground(False) + self.matplotlib.setObjectName("matplotlib") + self.mpl_layout = QtWidgets.QVBoxLayout(self.matplotlib) + self.mpl_layout.setContentsMargins(0, 0, 0, 0) + self.mpl_layout.setObjectName("mpl_layout") + self.main_layout.addWidget(self.matplotlib, 1, 0, 1, 1) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1097, 29)) + self.menubar.setObjectName("menubar") + self.menuFile = QtWidgets.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.actionExit = QtWidgets.QAction(MainWindow) + self.actionExit.setMenuRole(QtWidgets.QAction.TextHeuristicRole) + self.actionExit.setObjectName("actionExit") + self.actionLoad_Data = QtWidgets.QAction(MainWindow) + self.actionLoad_Data.setObjectName("actionLoad_Data") + self.menuFile.addAction(self.actionExit) + self.menubar.addAction(self.menuFile.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.Button_filter.setText(_translate("MainWindow", "Filter...")) + self.Button_plot.setText(_translate("MainWindow", "Plot")) + self.menuFile.setTitle(_translate("MainWindow", "Fi&le")) + self.actionExit.setText(_translate("MainWindow", "&Exit")) + self.actionLoad_Data.setText(_translate("MainWindow", "&Load Data")) + diff --git a/gui/gui.ui b/gui/gui.ui new file mode 100644 index 000000000..8da03fe03 --- /dev/null +++ b/gui/gui.ui @@ -0,0 +1,97 @@ + + + MainWindow + + + + 0 + 0 + 1097 + 800 + + + + MainWindow + + + + false + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + Filter... + + + + + + + Plot + + + + + + + + + + + 0 + 0 + + + + false + + + + + + + + + + 0 + 0 + 1097 + 29 + + + + + Fi&le + + + + + + + + + &Exit + + + QAction::TextHeuristicRole + + + + + &Load Data + + + + + + diff --git a/gui/main.py b/gui/main.py index f8a57c447..a094cc1d8 100644 --- a/gui/main.py +++ b/gui/main.py @@ -2,36 +2,114 @@ # -*- coding: utf-8 -*- import sys -from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication -from PyQt5.QtGui import QIcon import numpy as np +import pandas as pd -class Main(QMainWindow): +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar +from matplotlib.figure import Figure + +from PyQt5.QtCore import QAbstractTableModel, Qt +from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog +from gui import Ui_MainWindow +from filter import Ui_FilterDialog +from ivs.inout.fits import read_spectrum + +class PandasModel(QAbstractTableModel): + """ + Class to populate a table view with a pandas dataframe + """ + def __init__(self, data, parent=None): + QAbstractTableModel.__init__(self, parent) + self._data = data + + def rowCount(self, parent=None): + return self._data.shape[0] + + def columnCount(self, parent=None): + return self._data.shape[1] + + def data(self, index, role=Qt.DisplayRole): + if index.isValid(): + if role == Qt.DisplayRole: + return str(self._data.iloc[index.row(), index.column()]) + return None + + def headerData(self, col, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self._data.columns[col] + return None + + +class mainwindow_exec(): def __init__(self): - super().__init__() - self.initUI() + app = QApplication(sys.argv) + self.window = QMainWindow() + self.filter = QDialog() + + self.ui = Ui_MainWindow() + self.ui.setupUi(self.window) + self.filterui = Ui_FilterDialog() + self.filterui.setupUi(self.filter) + + self.init_data(obs_only=True) + self.add_mpl() + self.window.show() + + self.ui.Button_filter.clicked.connect(lambda: self.filter_dialog()) + self.ui.Button_plot.clicked.connect(lambda: self.update_plot()) + sys.exit(app.exec_()) - def initUI(self): + def init_data(self, obs_only): - exitAct = QAction(QIcon('exit.png'), '&Exit', self) - exitAct.setStatusTip('Exit application') - exitAct.triggered.connect(qApp.quit) + # Load hermes tsv overview into pandas frame + self.DATA = pd.read_csv('/STER/mercator/hermes/HermesFullDataOverview.tsv', + sep='\t', skiprows=2, header=None, + names=['unseq', 'prog_id', 'obsmode', 'bvcor', + 'observer', 'object', 'ra', 'dec', + 'bjd', 'exptime', 'pmtotal', 'date-avg', + 'airmass', 'filename']) - self.statusBar() + # obsmode = HRF_OBJ + if obs_only: + self.DATA = self.DATA[self.DATA['obsmode'] == 'HRF_OBJ'] - menubar = self.menuBar() - fileMenu = menubar.addMenu('&File') - fileMenu.addAction(exitAct) + def add_mpl(self): + self.fig = Figure() + self.ax = self.fig.add_subplot(111) + self.canvas = FigureCanvas(self.fig) + self.toolbar = NavigationToolbar(self.canvas, self.ui.matplotlib, + coordinates=True) + self.ui.mpl_layout.addWidget(self.toolbar) + self.ui.mpl_layout.addWidget(self.canvas) + self.canvas.draw() - self.setGeometry(300,300,300,200) - self.setWindowTitle('Simple menu') - self.show() + def update_plot(self): + try: + idx = self.filterui.FiltertableView.selectionModel().selectedRows() + filename = self.model.data(self.model.index(idx[0].row(), 13)) + starname = self.model.data(self.model.index(idx[0].row(), 5)) + if 'raw' in filename: + extname = 'HRF_OBJ_ext_CosmicsRemoved_log_merged_c' + filename = filename.replace('raw', 'reduced') + filename = filename.replace('HRF_OBJ', extname) + wav, flux = read_spectrum(filename) + self.ax.cla() + self.ax.plot(wav, flux) + self.ax.set_title(starname) + self.canvas.draw() + except(AttributeError): + pass + except(FileNotFoundError): + print('FileNotFoundError: \"' + filename + '\" not found...') -if __name__ == '__main__': + def filter_dialog(self): + self.model = PandasModel(self.DATA) + self.filterui.FiltertableView.setModel(self.model) + self.filter.show() - app = QApplication(sys.argv) - main = Main() - sys.exit(app.exec_()) +if __name__ == "__main__": + mainwindow_exec() From 529455f64c9d36511b257fda5a4b1c6182093e7b Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Tue, 11 Jun 2019 14:17:46 +0200 Subject: [PATCH 03/13] PEP8 compliance and small tweaks --- gui/main.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gui/main.py b/gui/main.py index a094cc1d8..2173813df 100644 --- a/gui/main.py +++ b/gui/main.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import sys -import numpy as np +# import numpy as np import pandas as pd from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas @@ -15,6 +15,7 @@ from filter import Ui_FilterDialog from ivs.inout.fits import read_spectrum + class PandasModel(QAbstractTableModel): """ Class to populate a table view with a pandas dataframe @@ -101,7 +102,7 @@ def update_plot(self): self.ax.plot(wav, flux) self.ax.set_title(starname) self.canvas.draw() - except(AttributeError): + except(AttributeError, IndexError): pass except(FileNotFoundError): print('FileNotFoundError: \"' + filename + '\" not found...') @@ -111,5 +112,6 @@ def filter_dialog(self): self.filterui.FiltertableView.setModel(self.model) self.filter.show() + if __name__ == "__main__": mainwindow_exec() From 1ee787b12fe5ffe2c112500d2a2c9863b3de4d40 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Tue, 11 Jun 2019 14:32:16 +0200 Subject: [PATCH 04/13] Added Pandas to IvS_repo_3.6 env requirements --- IvS_repo_3.6.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/IvS_repo_3.6.yml b/IvS_repo_3.6.yml index fb00adbb1..6672dae59 100644 --- a/IvS_repo_3.6.yml +++ b/IvS_repo_3.6.yml @@ -14,3 +14,4 @@ dependencies: - h5py=2.8.0 - ephem=3.7.6.0 - lxml=3.8.0 +- pandas=0.20 From c4a577b1a4da0d807654980d6b60c890981aa4b1 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Mon, 17 Jun 2019 13:40:50 +0200 Subject: [PATCH 05/13] CATALOGS/HERMES: fix to HermesOverview creation --- catalogs/hermes.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/catalogs/hermes.py b/catalogs/hermes.py index 0e9027201..90a19a8ef 100644 --- a/catalogs/hermes.py +++ b/catalogs/hermes.py @@ -1099,10 +1099,11 @@ def make_data_overview(): sys.stdout.flush() # flush to screen #-- maybe this file is already processed: forget about it then - index = existing_files.searchsorted(obj_file) - if index Date: Fri, 23 Aug 2019 14:35:42 +0200 Subject: [PATCH 06/13] GUI/MAIN: Improved GUI and plotting behaviour --- gui/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gui/main.py b/gui/main.py index 2173813df..49e9ac4d3 100644 --- a/gui/main.py +++ b/gui/main.py @@ -48,7 +48,7 @@ def __init__(self): app = QApplication(sys.argv) self.window = QMainWindow() - self.filter = QDialog() + self.filter = QDialog(parent=self.window) self.ui = Ui_MainWindow() self.ui.setupUi(self.window) @@ -98,7 +98,8 @@ def update_plot(self): filename = filename.replace('raw', 'reduced') filename = filename.replace('HRF_OBJ', extname) wav, flux = read_spectrum(filename) - self.ax.cla() + self.fig.clf() + self.ax = self.fig.add_subplot(111) self.ax.plot(wav, flux) self.ax.set_title(starname) self.canvas.draw() From 463df4961a71823092f1fd04648973f8ca483c7e Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Fri, 4 Oct 2019 16:35:50 +0200 Subject: [PATCH 07/13] Fixed merge issue with previous commit --- catalogs/hermes.py | 78 ---------------------------------------------- 1 file changed, 78 deletions(-) diff --git a/catalogs/hermes.py b/catalogs/hermes.py index d3e4e099a..684656966 100644 --- a/catalogs/hermes.py +++ b/catalogs/hermes.py @@ -1069,83 +1069,6 @@ def make_data_overview(directory='/STER/mercator/hermes/'): >>> data = ascii.read2recarray(hermes_file,splitchar='\\t') """ -<<<<<<< HEAD - logger.info('Collecting files...') - #-- all hermes data directories - dirs = sorted(glob.glob(os.path.join(config.ivs_dirs['hermes'],'20??????'))) - dirs = [idir for idir in dirs if os.path.isdir(idir)] - obj_files = [] - #-- collect in those directories the raw and relevant reduced files - for idir in dirs: - obj_files += sorted(glob.glob(os.path.join(idir,'raw','*.fits'))) - #obj_files += sorted(glob.glob(os.path.join(idir,'reduced','*OBJ*wavelength_merged.fits'))) - #obj_files += sorted(glob.glob(os.path.join(idir,'reduced','*OBJ*wavelength_merged_c.fits'))) - #obj_files += sorted(glob.glob(os.path.join(idir,'reduced','*OBJ*log_merged.fits'))) - #obj_files += sorted(glob.glob(os.path.join(idir,'reduced','*OBJ*log_merged_c.fits'))) - - #-- keep track of what is already in the file, if it exists: - try: - overview_file = config.get_datafile('catalogs/hermes','HermesFullDataOverview.tsv') - #overview_file = config.get_datafile(os.path.join('catalogs','hermes'),'HermesFullDataOverview.tsv') - overview_data = ascii.read2recarray(overview_file,splitchar='\t') - outfile = open(overview_file,'a') - logger.info('Found %d FITS files: appending to overview file %s'%(len(obj_files),overview_file)) - # if not, begin a new file - except IOError: - overview_file = 'HermesFullDataOverview.tsv' - outfile = open(overview_file,'w') - outfile.write('#unseq prog_id obsmode bvcor observer object ra dec bjd exptime pmtotal date-avg airmass filename\n') - outfile.write('#i i a20 >f8 a50 a50 >f8 >f8 >f8 >f8 >f8 a30 >f8 a200\n') - overview_data = {'filename':[]} - logger.info('Found %d FITS files: starting new overview file %s'%(len(obj_files),overview_file)) - - #-- and summarize the contents in a tab separated file (some columns contain spaces) - existing_files = np.sort(overview_data['filename']) - for i,obj_file in enumerate(obj_files): - sys.stdout.write(chr(27)+'[s') # save cursor - sys.stdout.write(chr(27)+'[2K') # remove line - sys.stdout.write('Scanning %5d / %5d FITS files'%(i+1,len(obj_files))) - sys.stdout.flush() # flush to screen - - #-- maybe this file is already processed: forget about it then - if len(existing_files): - index = existing_files.searchsorted(obj_file) - if index>>>>>> origin/master """ Derive the location of a reduced file from the raw file. The extension is "_cf" by default. """ From 91b6fa17fd51411cf180236b9b504cf4949ebe90 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Fri, 4 Oct 2019 16:56:03 +0200 Subject: [PATCH 08/13] GUI/filter: removed filter.py and filter.ui for dialog->tab change --- gui/filter.py | 34 ---------------------------------- gui/filter.ui | 46 ---------------------------------------------- 2 files changed, 80 deletions(-) delete mode 100644 gui/filter.py delete mode 100644 gui/filter.ui diff --git a/gui/filter.py b/gui/filter.py deleted file mode 100644 index 90a63a77a..000000000 --- a/gui/filter.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'filter.ui' -# -# Created by: PyQt5 UI code generator 5.6 -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore, QtGui, QtWidgets - -class Ui_FilterDialog(object): - def setupUi(self, FilterDialog): - FilterDialog.setObjectName("FilterDialog") - FilterDialog.resize(1130, 757) - self.verticalLayout = QtWidgets.QVBoxLayout(FilterDialog) - self.verticalLayout.setObjectName("verticalLayout") - self.FiltertableView = QtWidgets.QTableView(FilterDialog) - self.FiltertableView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) - self.FiltertableView.setEditTriggers(QtWidgets.QAbstractItemView.AnyKeyPressed|QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed|QtWidgets.QAbstractItemView.SelectedClicked) - self.FiltertableView.setAlternatingRowColors(False) - self.FiltertableView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) - self.FiltertableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - self.FiltertableView.setObjectName("FiltertableView") - self.FiltertableView.horizontalHeader().setSortIndicatorShown(False) - self.FiltertableView.horizontalHeader().setStretchLastSection(True) - self.verticalLayout.addWidget(self.FiltertableView) - - self.retranslateUi(FilterDialog) - QtCore.QMetaObject.connectSlotsByName(FilterDialog) - - def retranslateUi(self, FilterDialog): - _translate = QtCore.QCoreApplication.translate - FilterDialog.setWindowTitle(_translate("FilterDialog", "Dialog")) - diff --git a/gui/filter.ui b/gui/filter.ui deleted file mode 100644 index 5bb33842c..000000000 --- a/gui/filter.ui +++ /dev/null @@ -1,46 +0,0 @@ - - - FilterDialog - - - - 0 - 0 - 1130 - 757 - - - - Dialog - - - - - - QAbstractScrollArea::AdjustIgnored - - - QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked - - - false - - - QAbstractItemView::SingleSelection - - - QAbstractItemView::SelectRows - - - false - - - true - - - - - - - - From 919b65b8c287c567ca929297ab0d2f36dbd424cb Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Fri, 4 Oct 2019 18:47:14 +0200 Subject: [PATCH 09/13] GUI: Layout now in tab form, selection sidebar, + basic filter function --- gui/gui.py | 620 +++++++++++++++++-- gui/gui.ui | 1643 +++++++++++++++++++++++++++++++++++++++++++++++++-- gui/main.py | 202 ++++++- 3 files changed, 2358 insertions(+), 107 deletions(-) diff --git a/gui/gui.py b/gui/gui.py index e166434ce..362ac4505 100644 --- a/gui/gui.py +++ b/gui/gui.py @@ -11,26 +11,561 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(1097, 800) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setAutoFillBackground(False) - self.centralwidget.setObjectName("centralwidget") - self.main_layout = QtWidgets.QGridLayout(self.centralwidget) - self.main_layout.setObjectName("main_layout") - self.buttonframe = QtWidgets.QFrame(self.centralwidget) - self.buttonframe.setFrameShape(QtWidgets.QFrame.NoFrame) - self.buttonframe.setFrameShadow(QtWidgets.QFrame.Plain) - self.buttonframe.setObjectName("buttonframe") - self.button_layout = QtWidgets.QHBoxLayout(self.buttonframe) - self.button_layout.setObjectName("button_layout") - self.Button_filter = QtWidgets.QPushButton(self.buttonframe) - self.Button_filter.setObjectName("Button_filter") - self.button_layout.addWidget(self.Button_filter) - self.Button_plot = QtWidgets.QPushButton(self.buttonframe) - self.Button_plot.setObjectName("Button_plot") - self.button_layout.addWidget(self.Button_plot) - self.main_layout.addWidget(self.buttonframe, 0, 0, 1, 1) - self.matplotlib = QtWidgets.QWidget(self.centralwidget) + MainWindow.resize(1257, 842) + MainWindow.setIconSize(QtCore.QSize(22, 22)) + self.MainWindowFrame = QtWidgets.QWidget(MainWindow) + self.MainWindowFrame.setAutoFillBackground(False) + self.MainWindowFrame.setObjectName("MainWindowFrame") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.MainWindowFrame) + self.horizontalLayout.setObjectName("horizontalLayout") + self.SelectedData = QtWidgets.QTabWidget(self.MainWindowFrame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.SelectedData.sizePolicy().hasHeightForWidth()) + self.SelectedData.setSizePolicy(sizePolicy) + self.SelectedData.setMinimumSize(QtCore.QSize(300, 0)) + self.SelectedData.setObjectName("SelectedData") + self.SelectedDataFrame = QtWidgets.QWidget() + self.SelectedDataFrame.setObjectName("SelectedDataFrame") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.SelectedDataFrame) + self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_3.setObjectName("verticalLayout_3") + spacerItem = QtWidgets.QSpacerItem(20, 3, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + self.verticalLayout_3.addItem(spacerItem) + self.label = QtWidgets.QLabel(self.SelectedDataFrame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) + self.label.setSizePolicy(sizePolicy) + self.label.setObjectName("label") + self.verticalLayout_3.addWidget(self.label) + self.label_2 = QtWidgets.QLabel(self.SelectedDataFrame) + self.label_2.setObjectName("label_2") + self.verticalLayout_3.addWidget(self.label_2) + self.Selectedpushbutton = QtWidgets.QPushButton(self.SelectedDataFrame) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(251, 212, 213)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(165, 113, 114)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(251, 212, 213)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(251, 212, 213)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(165, 113, 114)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(251, 212, 213)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(251, 212, 213)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(165, 113, 114)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(123, 85, 85)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(247, 170, 171)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.Selectedpushbutton.setPalette(palette) + self.Selectedpushbutton.setObjectName("Selectedpushbutton") + self.verticalLayout_3.addWidget(self.Selectedpushbutton) + spacerItem1 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + self.verticalLayout_3.addItem(spacerItem1) + self.SelectedDataTable = QtWidgets.QTableView(self.SelectedDataFrame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.SelectedDataTable.sizePolicy().hasHeightForWidth()) + self.SelectedDataTable.setSizePolicy(sizePolicy) + self.SelectedDataTable.setFocusPolicy(QtCore.Qt.NoFocus) + self.SelectedDataTable.setFrameShape(QtWidgets.QFrame.NoFrame) + self.SelectedDataTable.setFrameShadow(QtWidgets.QFrame.Plain) + self.SelectedDataTable.setLineWidth(0) + self.SelectedDataTable.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) + self.SelectedDataTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.SelectedDataTable.setAlternatingRowColors(True) + self.SelectedDataTable.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.SelectedDataTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems) + self.SelectedDataTable.setObjectName("SelectedDataTable") + self.SelectedDataTable.horizontalHeader().setCascadingSectionResizes(False) + self.SelectedDataTable.horizontalHeader().setDefaultSectionSize(100) + self.SelectedDataTable.horizontalHeader().setMinimumSectionSize(1) + self.SelectedDataTable.horizontalHeader().setSortIndicatorShown(False) + self.SelectedDataTable.horizontalHeader().setStretchLastSection(True) + self.SelectedDataTable.verticalHeader().setVisible(False) + self.SelectedDataTable.verticalHeader().setHighlightSections(False) + self.SelectedDataTable.verticalHeader().setSortIndicatorShown(False) + self.verticalLayout_3.addWidget(self.SelectedDataTable) + self.SelectedData.addTab(self.SelectedDataFrame, "") + self.horizontalLayout.addWidget(self.SelectedData) + self.GuiTabs = QtWidgets.QTabWidget(self.MainWindowFrame) + self.GuiTabs.setObjectName("GuiTabs") + self.FilterData = QtWidgets.QWidget() + self.FilterData.setObjectName("FilterData") + self.verticalLayout = QtWidgets.QVBoxLayout(self.FilterData) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setObjectName("verticalLayout") + self.ObjectSearch = QtWidgets.QFrame(self.FilterData) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ObjectSearch.sizePolicy().hasHeightForWidth()) + self.ObjectSearch.setSizePolicy(sizePolicy) + self.ObjectSearch.setFrameShape(QtWidgets.QFrame.NoFrame) + self.ObjectSearch.setFrameShadow(QtWidgets.QFrame.Raised) + self.ObjectSearch.setLineWidth(0) + self.ObjectSearch.setObjectName("ObjectSearch") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.ObjectSearch) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem2) + self.ObjectLabel = QtWidgets.QLabel(self.ObjectSearch) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.ObjectLabel.sizePolicy().hasHeightForWidth()) + self.ObjectLabel.setSizePolicy(sizePolicy) + self.ObjectLabel.setLayoutDirection(QtCore.Qt.LeftToRight) + self.ObjectLabel.setObjectName("ObjectLabel") + self.horizontalLayout_2.addWidget(self.ObjectLabel) + self.ObjectlineEdit = QtWidgets.QLineEdit(self.ObjectSearch) + self.ObjectlineEdit.setObjectName("ObjectlineEdit") + self.horizontalLayout_2.addWidget(self.ObjectlineEdit) + self.ObjectpushButton = QtWidgets.QPushButton(self.ObjectSearch) + self.ObjectpushButton.setObjectName("ObjectpushButton") + self.horizontalLayout_2.addWidget(self.ObjectpushButton) + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem3) + self.verticalLayout.addWidget(self.ObjectSearch) + self.FilterAddButton = QtWidgets.QPushButton(self.FilterData) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.FilterAddButton.setPalette(palette) + self.FilterAddButton.setAutoFillBackground(False) + self.FilterAddButton.setFlat(False) + self.FilterAddButton.setObjectName("FilterAddButton") + self.verticalLayout.addWidget(self.FilterAddButton) + spacerItem4 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + self.verticalLayout.addItem(spacerItem4) + self.FiltertableView = QtWidgets.QTableView(self.FilterData) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.FiltertableView.sizePolicy().hasHeightForWidth()) + self.FiltertableView.setSizePolicy(sizePolicy) + self.FiltertableView.setFocusPolicy(QtCore.Qt.NoFocus) + self.FiltertableView.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.FiltertableView.setFrameShadow(QtWidgets.QFrame.Sunken) + self.FiltertableView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) + self.FiltertableView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.FiltertableView.setAlternatingRowColors(True) + self.FiltertableView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.FiltertableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + self.FiltertableView.setSortingEnabled(True) + self.FiltertableView.setObjectName("FiltertableView") + self.FiltertableView.horizontalHeader().setCascadingSectionResizes(False) + self.FiltertableView.horizontalHeader().setSortIndicatorShown(True) + self.FiltertableView.horizontalHeader().setStretchLastSection(True) + self.FiltertableView.verticalHeader().setVisible(False) + self.FiltertableView.verticalHeader().setHighlightSections(False) + self.FiltertableView.verticalHeader().setSortIndicatorShown(False) + self.verticalLayout.addWidget(self.FiltertableView) + self.GuiTabs.addTab(self.FilterData, "") + self.PlotSpectra = QtWidgets.QWidget() + self.PlotSpectra.setObjectName("PlotSpectra") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.PlotSpectra) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.PlotButton = QtWidgets.QPushButton(self.PlotSpectra) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(226, 255, 231)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(132, 170, 139)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(99, 127, 104)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(198, 255, 208)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.PlotButton.setPalette(palette) + self.PlotButton.setObjectName("PlotButton") + self.verticalLayout_2.addWidget(self.PlotButton) + self.matplotlib = QtWidgets.QWidget(self.PlotSpectra) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -41,34 +576,49 @@ def setupUi(self, MainWindow): self.mpl_layout = QtWidgets.QVBoxLayout(self.matplotlib) self.mpl_layout.setContentsMargins(0, 0, 0, 0) self.mpl_layout.setObjectName("mpl_layout") - self.main_layout.addWidget(self.matplotlib, 1, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1097, 29)) - self.menubar.setObjectName("menubar") - self.menuFile = QtWidgets.QMenu(self.menubar) + self.verticalLayout_2.addWidget(self.matplotlib) + self.GuiTabs.addTab(self.PlotSpectra, "") + self.horizontalLayout.addWidget(self.GuiTabs) + MainWindow.setCentralWidget(self.MainWindowFrame) + self.menuBar = QtWidgets.QMenuBar(MainWindow) + self.menuBar.setGeometry(QtCore.QRect(0, 0, 1257, 29)) + self.menuBar.setObjectName("menuBar") + self.menuFile = QtWidgets.QMenu(self.menuBar) self.menuFile.setObjectName("menuFile") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) + MainWindow.setMenuBar(self.menuBar) + self.statusBar = QtWidgets.QStatusBar(MainWindow) + self.statusBar.setObjectName("statusBar") + MainWindow.setStatusBar(self.statusBar) self.actionExit = QtWidgets.QAction(MainWindow) self.actionExit.setMenuRole(QtWidgets.QAction.TextHeuristicRole) self.actionExit.setObjectName("actionExit") self.actionLoad_Data = QtWidgets.QAction(MainWindow) self.actionLoad_Data.setObjectName("actionLoad_Data") - self.menuFile.addAction(self.actionExit) - self.menubar.addAction(self.menuFile.menuAction()) + self.actionExit_2 = QtWidgets.QAction(MainWindow) + self.actionExit_2.setObjectName("actionExit_2") + self.menuFile.addAction(self.actionExit_2) + self.menuBar.addAction(self.menuFile.menuAction()) self.retranslateUi(MainWindow) + self.SelectedData.setCurrentIndex(0) + self.GuiTabs.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.Button_filter.setText(_translate("MainWindow", "Filter...")) - self.Button_plot.setText(_translate("MainWindow", "Plot")) - self.menuFile.setTitle(_translate("MainWindow", "Fi&le")) + self.label.setText(_translate("MainWindow", "

Highlighted files can also be removed

")) + self.label_2.setText(_translate("MainWindow", "

using DELETE key.

")) + self.Selectedpushbutton.setText(_translate("MainWindow", "Remove highlighted files")) + self.SelectedData.setTabText(self.SelectedData.indexOf(self.SelectedDataFrame), _translate("MainWindow", "Selected Data")) + self.ObjectLabel.setText(_translate("MainWindow", "Object")) + self.ObjectpushButton.setText(_translate("MainWindow", "Search")) + self.FilterAddButton.setText(_translate("MainWindow", " Add highlighted choices to the sidebar")) + self.GuiTabs.setTabText(self.GuiTabs.indexOf(self.FilterData), _translate("MainWindow", "Filter Data")) + self.PlotButton.setText(_translate("MainWindow", "Plot")) + self.GuiTabs.setTabText(self.GuiTabs.indexOf(self.PlotSpectra), _translate("MainWindow", "View Spectra")) + self.menuFile.setTitle(_translate("MainWindow", "F&ile")) self.actionExit.setText(_translate("MainWindow", "&Exit")) self.actionLoad_Data.setText(_translate("MainWindow", "&Load Data")) + self.actionExit_2.setText(_translate("MainWindow", "&Exit")) diff --git a/gui/gui.ui b/gui/gui.ui index 8da03fe03..2aa03a0d6 100644 --- a/gui/gui.ui +++ b/gui/gui.ui @@ -6,78 +6,1634 @@ 0 0 - 1097 - 800 + 1257 + 842 MainWindow - + + + 22 + 22 + + + false - - - - - QFrame::NoFrame - - - QFrame::Plain - - - - - - Filter... - - - - - - - Plot - - - - - - - - + + + - + 0 0 - - false + + + 300 + 0 + + + + 0 - + + + Selected Data + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 3 + + + + + + + + + 0 + 0 + + + + <html><head/><body><p align="center">Highlighted files can also be removed</p></body></html> + + + + + + + <html><head/><body><p align="center">using DELETE key.</p></body></html> + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 247 + 170 + 171 + + + + + + + 255 + 255 + 255 + + + + + + + 251 + 212 + 213 + + + + + + + 123 + 85 + 85 + + + + + + + 165 + 113 + 114 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 170 + 171 + + + + + + + 0 + 0 + 0 + + + + + + + 251 + 212 + 213 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 247 + 170 + 171 + + + + + + + 255 + 255 + 255 + + + + + + + 251 + 212 + 213 + + + + + + + 123 + 85 + 85 + + + + + + + 165 + 113 + 114 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 247 + 170 + 171 + + + + + + + 0 + 0 + 0 + + + + + + + 251 + 212 + 213 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 123 + 85 + 85 + + + + + + + 247 + 170 + 171 + + + + + + + 255 + 255 + 255 + + + + + + + 251 + 212 + 213 + + + + + + + 123 + 85 + 85 + + + + + + + 165 + 113 + 114 + + + + + + + 123 + 85 + 85 + + + + + + + 255 + 255 + 255 + + + + + + + 123 + 85 + 85 + + + + + + + 247 + 170 + 171 + + + + + + + 247 + 170 + 171 + + + + + + + 0 + 0 + 0 + + + + + + + 247 + 170 + 171 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + Remove highlighted files + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + QAbstractScrollArea::AdjustToContents + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectItems + + + false + + + 100 + + + 1 + + + false + + + true + + + false + + + false + + + false + + + + + + + + + + + 0 + + + + Filter Data + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + 0 + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + Object + + + + + + + + + + Search + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 226 + 255 + 231 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 226 + 255 + 231 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 99 + 127 + 104 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 99 + 127 + 104 + + + + + + + 255 + 255 + 255 + + + + + + + 99 + 127 + 104 + + + + + + + 198 + 255 + 208 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + false + + + Add highlighted choices to the sidebar + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + QFrame::StyledPanel + + + QFrame::Sunken + + + QAbstractScrollArea::AdjustIgnored + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectRows + + + true + + + false + + + true + + + true + + + false + + + false + + + false + + + + + + + + View Spectra + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 226 + 255 + 231 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 226 + 255 + 231 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 99 + 127 + 104 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 255 + + + + + + + 226 + 255 + 231 + + + + + + + 99 + 127 + 104 + + + + + + + 132 + 170 + 139 + + + + + + + 99 + 127 + 104 + + + + + + + 255 + 255 + 255 + + + + + + + 99 + 127 + 104 + + + + + + + 198 + 255 + 208 + + + + + + + 198 + 255 + 208 + + + + + + + 0 + 0 + 0 + + + + + + + 198 + 255 + 208 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + Plot + + + + + + + + 0 + 0 + + + + false + + + + + + - + 0 0 - 1097 + 1257 29 - Fi&le + F&ile - + - + &Exit @@ -91,6 +1647,11 @@ &Load Data + + + &Exit + + diff --git a/gui/main.py b/gui/main.py index 49e9ac4d3..08685e8e2 100644 --- a/gui/main.py +++ b/gui/main.py @@ -8,11 +8,10 @@ from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure - +from PyQt5 import QtCore from PyQt5.QtCore import QAbstractTableModel, Qt -from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog -from gui import Ui_MainWindow -from filter import Ui_FilterDialog +from PyQt5.QtWidgets import QApplication, QMainWindow +from ivs.gui.gui import Ui_MainWindow from ivs.inout.fits import read_spectrum @@ -41,33 +40,125 @@ def headerData(self, col, orientation, role): return self._data.columns[col] return None + def flags(self, index): + flags = super(self.__class__, self).flags(index) + flags |= QtCore.Qt.ItemIsEditable + flags |= QtCore.Qt.ItemIsSelectable + flags |= QtCore.Qt.ItemIsEnabled + flags |= QtCore.Qt.ItemIsDragEnabled + flags |= QtCore.Qt.ItemIsDropEnabled + return flags + + def sort(self, Ncol, order): + """Sort table by given column number. + """ + try: + self.layoutAboutToBeChanged.emit() + self._data = self._data.sort_values(self._data.columns[Ncol], + ascending=not order) + self.layoutChanged.emit() + except Exception as e: + print(e) + + +class SelectionModel(QAbstractTableModel): + """ + Simple class to populate a table view with Selected data + """ + def __init__(self, list, parent=None): + QAbstractTableModel.__init__(self, parent) + self.headers = ['Filename'] + self.list = list + + def rowCount(self, parent=None): + return len(self.list) + + def columnCount(self, parent=None): + return 1 + + def data(self, index, role=Qt.DisplayRole): + if index.isValid(): + if role == Qt.DisplayRole: + return self.list[index.row()] + return None + + def headerData(self, col, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self.headers[col] + return None -class mainwindow_exec(): +class MainWindow(QMainWindow, Ui_MainWindow): + """ + Main GUI window: used to interactively view EDIBLES spectra. - def __init__(self): + Command line usage: $ python main.py - app = QApplication(sys.argv) - self.window = QMainWindow() - self.filter = QDialog(parent=self.window) + Current functionality: + - Use filter tab to select EDIBLES spectra + - Use plot tab to display matplotlib plot of highlighted spectra + TODO: + - I/O functions for subselection? + - Add FITS header/stellar/etc info into new panel below MPL canvas? + - Implement filter functions for overview table (by starname, etc) + - Expand overview file with additional parameters? (exptime, S/N, etc) + - Integrate fitting/science functions into GUI + (i.e. interactive lambda selection for profile fitting, etc) + - add more TODO points + """ + def __init__(self, parent=None): + # Initialise the Main window + QMainWindow.__init__(self, parent=parent) self.ui = Ui_MainWindow() - self.ui.setupUi(self.window) - self.filterui = Ui_FilterDialog() - self.filterui.setupUi(self.filter) + self.ui.setupUi(self) + + self.selected_data = [] - self.init_data(obs_only=True) + # Load overview file from /catalog/DR3_obslist.ext.txt + self.load_overview(obs_only=True) + # Initialise Filter/Data overview + self.filtertab(self.overview) + # Initialise MPL figure and toolbar self.add_mpl() - self.window.show() - self.ui.Button_filter.clicked.connect(lambda: self.filter_dialog()) - self.ui.Button_plot.clicked.connect(lambda: self.update_plot()) + # Connect Main window buttons to relevant functions + self.ui.FilterAddButton.clicked.connect(lambda: self.filter_add()) + self.ui.PlotButton.clicked.connect(lambda: self.update_plot()) + self.ui.ObjectpushButton.clicked.connect(lambda: self.Objectfilter()) + self.ui.Selectedpushbutton.clicked.connect(lambda: self.Remove_selected()) + + def keyPressEvent(self, event): + + # Delete key used to remove highlighted spectra from selected sidebar + if event.key() == QtCore.Qt.Key_Delete: + self.Remove_selected() + + def Remove_selected(self): + # Get highlighted rows + idx = self.ui.SelectedDataTable.selectionModel().selectedRows() + + # Retrieve filename corresponding to highlighted rows + # ( TODO probably a nicer way to do this?) + filenames = [] + for idxxx in idx: + filenames.append(self.selectionmodel.data( + self.selectionmodel.index(idxxx.row(), 0))) + + # Iterate over highlighted files, remove rom selection list + for filename in filenames: + if len(self.selected_data): + if filename in self.selected_data: + self.selected_data.remove(filename) + continue - sys.exit(app.exec_()) + # Regenerate selection model and tableview + self.selectionmodel = SelectionModel(self.selected_data) + self.ui.SelectedDataTable.setModel(self.selectionmodel) - def init_data(self, obs_only): + def load_overview(self, obs_only): # Load hermes tsv overview into pandas frame - self.DATA = pd.read_csv('/STER/mercator/hermes/HermesFullDataOverview.tsv', + self.overview = pd.read_csv('/STER/mercator/hermes/HermesFullDataOverview.tsv', sep='\t', skiprows=2, header=None, names=['unseq', 'prog_id', 'obsmode', 'bvcor', 'observer', 'object', 'ra', 'dec', @@ -76,43 +167,92 @@ def init_data(self, obs_only): # obsmode = HRF_OBJ if obs_only: - self.DATA = self.DATA[self.DATA['obsmode'] == 'HRF_OBJ'] + self.overview = self.overview[self.overview['obsmode'] == 'HRF_OBJ'] def add_mpl(self): + # Initial MPL figure and toolbar self.fig = Figure() self.ax = self.fig.add_subplot(111) self.canvas = FigureCanvas(self.fig) self.toolbar = NavigationToolbar(self.canvas, self.ui.matplotlib, coordinates=True) + # Add MPL canvas and toolbar to Main window self.ui.mpl_layout.addWidget(self.toolbar) self.ui.mpl_layout.addWidget(self.canvas) self.canvas.draw() def update_plot(self): + try: - idx = self.filterui.FiltertableView.selectionModel().selectedRows() - filename = self.model.data(self.model.index(idx[0].row(), 13)) - starname = self.model.data(self.model.index(idx[0].row(), 5)) + # Retrieve first highlighted row from tableview + idx = self.ui.SelectedDataTable.selectionModel().selectedRows()[0] + self.fig.clf() + self.ax = self.fig.add_subplot(111) + filename = self.selectionmodel.data( + self.selectionmodel.index(idx.row(), 0)) + # Defaulting to 'log_merged_c' due to incomplete '_cf' if 'raw' in filename: extname = 'HRF_OBJ_ext_CosmicsRemoved_log_merged_c' filename = filename.replace('raw', 'reduced') filename = filename.replace('HRF_OBJ', extname) + # Load wav and flux of corresponding spectrum wav, flux = read_spectrum(filename) - self.fig.clf() + + # Refresh and replot figure self.ax = self.fig.add_subplot(111) self.ax.plot(wav, flux) - self.ax.set_title(starname) + self.ax.set_title(filename) self.canvas.draw() except(AttributeError, IndexError): pass except(FileNotFoundError): - print('FileNotFoundError: \"' + filename + '\" not found...') + error_text = 'FileNotFoundError: \"' + filename + '\" not found...' + self.ui.statusBar.showMessage(error_text, 3000) + + def filtertab(self, input): + # Initialise overview table from pandas dataframe, and show the dialog + self.model = PandasModel(input) + self.ui.FiltertableView.setModel(self.model) + + def filter_add(self): + idx = self.ui.FiltertableView.selectionModel().selectedRows() + skiptotal = 0 + for idxxx in idx: + filename = self.model.data(self.model.index(idxxx.row(), 13)) + + if len(self.selected_data): + if filename in self.selected_data: + skiptotal += 1 + continue + self.selected_data.append(filename) + if len(self.selected_data): + self.selectionmodel = SelectionModel(self.selected_data) + self.ui.SelectedDataTable.setModel(self.selectionmodel) + + if skiptotal: + if skiptotal == len(idx): + statustext = str(skiptotal) + ' spectra already added...' + else: + statustext = (str(skiptotal) + ' spectra already added. ' + + str(len(idx)-skiptotal) + + ' new spectra added...') + elif len(idx): + statustext = str(len(idx))+' spectra addded...' + else: + statustext = '' + self.ui.statusBar.showMessage(statustext, 3000) - def filter_dialog(self): - self.model = PandasModel(self.DATA) - self.filterui.FiltertableView.setModel(self.model) - self.filter.show() + def Objectfilter(self): + if len(self.ui.ObjectlineEdit.text()): + #print(set(self.overview['object'])) + self.filtertab(self.overview[self.overview['object'].str.contains( + self.ui.ObjectlineEdit.text(), na=False, case=False)]) + else: + self.filtertab(self.overview) if __name__ == "__main__": - mainwindow_exec() + app = QApplication(sys.argv) + w = MainWindow() + w.show() + sys.exit(app.exec_()) From 1850b906184ca47e9147d9ce817d2ad0bf2d14e7 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Tue, 8 Oct 2019 18:39:02 +0200 Subject: [PATCH 10/13] GUI/MAIN: adjustments to comments --- gui/main.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/gui/main.py b/gui/main.py index 08685e8e2..0a34de3e4 100644 --- a/gui/main.py +++ b/gui/main.py @@ -89,22 +89,21 @@ def headerData(self, col, orientation, role): class MainWindow(QMainWindow, Ui_MainWindow): """ - Main GUI window: used to interactively view EDIBLES spectra. + Main GUI window: used to interactively view HERMES spectra. Command line usage: $ python main.py Current functionality: - - Use filter tab to select EDIBLES spectra + - Use filter tab to select HERMES spectra - Use plot tab to display matplotlib plot of highlighted spectra TODO: - I/O functions for subselection? - Add FITS header/stellar/etc info into new panel below MPL canvas? - Implement filter functions for overview table (by starname, etc) - - Expand overview file with additional parameters? (exptime, S/N, etc) - Integrate fitting/science functions into GUI (i.e. interactive lambda selection for profile fitting, etc) - - add more TODO points + - Integrate with SIMBAD (for search, expanded stellar info, etc) """ def __init__(self, parent=None): # Initialise the Main window @@ -114,7 +113,7 @@ def __init__(self, parent=None): self.selected_data = [] - # Load overview file from /catalog/DR3_obslist.ext.txt + # Load HERMES overview TSV file self.load_overview(obs_only=True) # Initialise Filter/Data overview self.filtertab(self.overview) @@ -244,7 +243,6 @@ def filter_add(self): def Objectfilter(self): if len(self.ui.ObjectlineEdit.text()): - #print(set(self.overview['object'])) self.filtertab(self.overview[self.overview['object'].str.contains( self.ui.ObjectlineEdit.text(), na=False, case=False)]) else: From 1a8480136bebbd55df9572528a6536555217f819 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Sat, 12 Oct 2019 16:00:30 +0200 Subject: [PATCH 11/13] GUI: Added observer+program filters, moved tablemodels to separate file --- gui/gui.py | 73 +++++++++++++++++++++++++++------------ gui/gui.ui | 70 ++++++++++++++++++++++++++++++++++--- gui/main.py | 96 ++++++++------------------------------------------- gui/models.py | 78 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 208 insertions(+), 109 deletions(-) create mode 100644 gui/models.py diff --git a/gui/gui.py b/gui/gui.py index 362ac4505..6487b3021 100644 --- a/gui/gui.py +++ b/gui/gui.py @@ -220,38 +220,61 @@ def setupUi(self, MainWindow): self.verticalLayout = QtWidgets.QVBoxLayout(self.FilterData) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") - self.ObjectSearch = QtWidgets.QFrame(self.FilterData) + self.SearchBox = QtWidgets.QFrame(self.FilterData) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.ObjectSearch.sizePolicy().hasHeightForWidth()) - self.ObjectSearch.setSizePolicy(sizePolicy) - self.ObjectSearch.setFrameShape(QtWidgets.QFrame.NoFrame) - self.ObjectSearch.setFrameShadow(QtWidgets.QFrame.Raised) - self.ObjectSearch.setLineWidth(0) - self.ObjectSearch.setObjectName("ObjectSearch") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.ObjectSearch) + sizePolicy.setHeightForWidth(self.SearchBox.sizePolicy().hasHeightForWidth()) + self.SearchBox.setSizePolicy(sizePolicy) + self.SearchBox.setFrameShape(QtWidgets.QFrame.NoFrame) + self.SearchBox.setFrameShadow(QtWidgets.QFrame.Raised) + self.SearchBox.setLineWidth(0) + self.SearchBox.setObjectName("SearchBox") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.SearchBox) self.horizontalLayout_2.setObjectName("horizontalLayout_2") spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem2) - self.ObjectLabel = QtWidgets.QLabel(self.ObjectSearch) + self.ObjLabel = QtWidgets.QLabel(self.SearchBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.ObjectLabel.sizePolicy().hasHeightForWidth()) - self.ObjectLabel.setSizePolicy(sizePolicy) - self.ObjectLabel.setLayoutDirection(QtCore.Qt.LeftToRight) - self.ObjectLabel.setObjectName("ObjectLabel") - self.horizontalLayout_2.addWidget(self.ObjectLabel) - self.ObjectlineEdit = QtWidgets.QLineEdit(self.ObjectSearch) - self.ObjectlineEdit.setObjectName("ObjectlineEdit") - self.horizontalLayout_2.addWidget(self.ObjectlineEdit) - self.ObjectpushButton = QtWidgets.QPushButton(self.ObjectSearch) - self.ObjectpushButton.setObjectName("ObjectpushButton") - self.horizontalLayout_2.addWidget(self.ObjectpushButton) + sizePolicy.setHeightForWidth(self.ObjLabel.sizePolicy().hasHeightForWidth()) + self.ObjLabel.setSizePolicy(sizePolicy) + self.ObjLabel.setLayoutDirection(QtCore.Qt.LeftToRight) + self.ObjLabel.setObjectName("ObjLabel") + self.horizontalLayout_2.addWidget(self.ObjLabel) + self.ObjLineEdit = QtWidgets.QLineEdit(self.SearchBox) + self.ObjLineEdit.setClearButtonEnabled(True) + self.ObjLineEdit.setObjectName("ObjLineEdit") + self.horizontalLayout_2.addWidget(self.ObjLineEdit) + self.ObserverLabel = QtWidgets.QLabel(self.SearchBox) + self.ObserverLabel.setObjectName("ObserverLabel") + self.horizontalLayout_2.addWidget(self.ObserverLabel) + self.ObserverLineEdit = QtWidgets.QLineEdit(self.SearchBox) + self.ObserverLineEdit.setClearButtonEnabled(True) + self.ObserverLineEdit.setObjectName("ObserverLineEdit") + self.horizontalLayout_2.addWidget(self.ObserverLineEdit) + self.ProgLabel = QtWidgets.QLabel(self.SearchBox) + self.ProgLabel.setObjectName("ProgLabel") + self.horizontalLayout_2.addWidget(self.ProgLabel) + self.ProgSpinBox = QtWidgets.QSpinBox(self.SearchBox) + self.ProgSpinBox.setAcceptDrops(False) + self.ProgSpinBox.setInputMethodHints(QtCore.Qt.ImhDigitsOnly) + self.ProgSpinBox.setWrapping(False) + self.ProgSpinBox.setFrame(True) + self.ProgSpinBox.setButtonSymbols(QtWidgets.QAbstractSpinBox.UpDownArrows) + self.ProgSpinBox.setCorrectionMode(QtWidgets.QAbstractSpinBox.CorrectToNearestValue) + self.ProgSpinBox.setMinimum(0) + self.ProgSpinBox.setMaximum(200) + self.ProgSpinBox.setProperty("value", 0) + self.ProgSpinBox.setObjectName("ProgSpinBox") + self.horizontalLayout_2.addWidget(self.ProgSpinBox) + self.SearchPushButton = QtWidgets.QPushButton(self.SearchBox) + self.SearchPushButton.setObjectName("SearchPushButton") + self.horizontalLayout_2.addWidget(self.SearchPushButton) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem3) - self.verticalLayout.addWidget(self.ObjectSearch) + self.verticalLayout.addWidget(self.SearchBox) self.FilterAddButton = QtWidgets.QPushButton(self.FilterData) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) @@ -403,6 +426,7 @@ def setupUi(self, MainWindow): sizePolicy.setHeightForWidth(self.FiltertableView.sizePolicy().hasHeightForWidth()) self.FiltertableView.setSizePolicy(sizePolicy) self.FiltertableView.setFocusPolicy(QtCore.Qt.NoFocus) + self.FiltertableView.setAcceptDrops(False) self.FiltertableView.setFrameShape(QtWidgets.QFrame.StyledPanel) self.FiltertableView.setFrameShadow(QtWidgets.QFrame.Sunken) self.FiltertableView.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) @@ -611,8 +635,11 @@ def retranslateUi(self, MainWindow): self.label_2.setText(_translate("MainWindow", "

using DELETE key.

")) self.Selectedpushbutton.setText(_translate("MainWindow", "Remove highlighted files")) self.SelectedData.setTabText(self.SelectedData.indexOf(self.SelectedDataFrame), _translate("MainWindow", "Selected Data")) - self.ObjectLabel.setText(_translate("MainWindow", "Object")) - self.ObjectpushButton.setText(_translate("MainWindow", "Search")) + self.ObjLabel.setText(_translate("MainWindow", "Object")) + self.ObserverLabel.setText(_translate("MainWindow", "Observer")) + self.ProgLabel.setText(_translate("MainWindow", "Prog ID")) + self.ProgSpinBox.setSpecialValueText(_translate("MainWindow", "None")) + self.SearchPushButton.setText(_translate("MainWindow", "Search")) self.FilterAddButton.setText(_translate("MainWindow", " Add highlighted choices to the sidebar")) self.GuiTabs.setTabText(self.GuiTabs.indexOf(self.FilterData), _translate("MainWindow", "Filter Data")) self.PlotButton.setText(_translate("MainWindow", "Plot")) diff --git a/gui/gui.ui b/gui/gui.ui index 2aa03a0d6..d01cf553f 100644 --- a/gui/gui.ui +++ b/gui/gui.ui @@ -596,7 +596,7 @@ - + 0 @@ -627,7 +627,7 @@ - + 0 @@ -643,10 +643,69 @@ - + + + true + + + + + + + Observer + + + + + + + true + + - + + + Prog ID + + + + + + + false + + + Qt::ImhDigitsOnly + + + false + + + true + + + QAbstractSpinBox::UpDownArrows + + + None + + + QAbstractSpinBox::CorrectToNearestValue + + + 0 + + + 200 + + + 0 + + + + + Search @@ -1123,6 +1182,9 @@ Qt::NoFocus + + false + QFrame::StyledPanel diff --git a/gui/main.py b/gui/main.py index 0a34de3e4..37255018f 100644 --- a/gui/main.py +++ b/gui/main.py @@ -8,85 +8,13 @@ from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure -from PyQt5 import QtCore -from PyQt5.QtCore import QAbstractTableModel, Qt from PyQt5.QtWidgets import QApplication, QMainWindow +from PyQt5 import QtCore from ivs.gui.gui import Ui_MainWindow from ivs.inout.fits import read_spectrum +from ivs.gui.models import PandasModel, SelectionModel -class PandasModel(QAbstractTableModel): - """ - Class to populate a table view with a pandas dataframe - """ - def __init__(self, data, parent=None): - QAbstractTableModel.__init__(self, parent) - self._data = data - - def rowCount(self, parent=None): - return self._data.shape[0] - - def columnCount(self, parent=None): - return self._data.shape[1] - - def data(self, index, role=Qt.DisplayRole): - if index.isValid(): - if role == Qt.DisplayRole: - return str(self._data.iloc[index.row(), index.column()]) - return None - - def headerData(self, col, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: - return self._data.columns[col] - return None - - def flags(self, index): - flags = super(self.__class__, self).flags(index) - flags |= QtCore.Qt.ItemIsEditable - flags |= QtCore.Qt.ItemIsSelectable - flags |= QtCore.Qt.ItemIsEnabled - flags |= QtCore.Qt.ItemIsDragEnabled - flags |= QtCore.Qt.ItemIsDropEnabled - return flags - - def sort(self, Ncol, order): - """Sort table by given column number. - """ - try: - self.layoutAboutToBeChanged.emit() - self._data = self._data.sort_values(self._data.columns[Ncol], - ascending=not order) - self.layoutChanged.emit() - except Exception as e: - print(e) - - -class SelectionModel(QAbstractTableModel): - """ - Simple class to populate a table view with Selected data - """ - def __init__(self, list, parent=None): - QAbstractTableModel.__init__(self, parent) - self.headers = ['Filename'] - self.list = list - - def rowCount(self, parent=None): - return len(self.list) - - def columnCount(self, parent=None): - return 1 - - def data(self, index, role=Qt.DisplayRole): - if index.isValid(): - if role == Qt.DisplayRole: - return self.list[index.row()] - return None - - def headerData(self, col, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: - return self.headers[col] - return None - class MainWindow(QMainWindow, Ui_MainWindow): """ Main GUI window: used to interactively view HERMES spectra. @@ -123,7 +51,7 @@ def __init__(self, parent=None): # Connect Main window buttons to relevant functions self.ui.FilterAddButton.clicked.connect(lambda: self.filter_add()) self.ui.PlotButton.clicked.connect(lambda: self.update_plot()) - self.ui.ObjectpushButton.clicked.connect(lambda: self.Objectfilter()) + self.ui.SearchPushButton.clicked.connect(lambda: self.Objectfilter()) self.ui.Selectedpushbutton.clicked.connect(lambda: self.Remove_selected()) def keyPressEvent(self, event): @@ -157,7 +85,7 @@ def Remove_selected(self): def load_overview(self, obs_only): # Load hermes tsv overview into pandas frame - self.overview = pd.read_csv('/STER/mercator/hermes/HermesFullDataOverview.tsv', + self.overview = pd.read_csv('/lhome/mike/hermes/HermesFullDataOverview.tsv', sep='\t', skiprows=2, header=None, names=['unseq', 'prog_id', 'obsmode', 'bvcor', 'observer', 'object', 'ra', 'dec', @@ -242,12 +170,16 @@ def filter_add(self): self.ui.statusBar.showMessage(statustext, 3000) def Objectfilter(self): - if len(self.ui.ObjectlineEdit.text()): - self.filtertab(self.overview[self.overview['object'].str.contains( - self.ui.ObjectlineEdit.text(), na=False, case=False)]) - else: - self.filtertab(self.overview) - + newdata = self.overview + if len(self.ui.ObjLineEdit.text()): + newdata= newdata[newdata['object'].str.contains( + self.ui.ObjLineEdit.text(), na=False, case=False)] + if len(self.ui.ObserverLineEdit.text()): + newdata= newdata[newdata['observer'].str.contains( + self.ui.ObserverLineEdit.text(), na=False, case=False)] + if self.ui.ProgSpinBox.value(): + newdata= newdata[newdata['prog_id'] == self.ui.ProgSpinBox.value()] + self.filtertab(newdata) if __name__ == "__main__": app = QApplication(sys.argv) diff --git a/gui/models.py b/gui/models.py new file mode 100644 index 000000000..b4fe2b528 --- /dev/null +++ b/gui/models.py @@ -0,0 +1,78 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +from PyQt5.QtCore import QAbstractTableModel, Qt +from PyQt5 import QtCore + + +class PandasModel(QAbstractTableModel): + """ + Class to populate a table view with a pandas dataframe + """ + def __init__(self, data, parent=None): + QAbstractTableModel.__init__(self, parent) + self._data = data + + def rowCount(self, parent=None): + return self._data.shape[0] + + def columnCount(self, parent=None): + return self._data.shape[1] + + def data(self, index, role=Qt.DisplayRole): + if index.isValid(): + if role == Qt.DisplayRole: + return str(self._data.iloc[index.row(), index.column()]) + return None + + def headerData(self, col, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self._data.columns[col] + return None + + def flags(self, index): + flags = super(self.__class__, self).flags(index) + flags |= QtCore.Qt.ItemIsEditable + flags |= QtCore.Qt.ItemIsSelectable + flags |= QtCore.Qt.ItemIsEnabled + flags |= QtCore.Qt.ItemIsDragEnabled + flags |= QtCore.Qt.ItemIsDropEnabled + return flags + + def sort(self, Ncol, order): + """Sort table by given column number. + """ + try: + self.layoutAboutToBeChanged.emit() + self._data = self._data.sort_values(self._data.columns[Ncol], + ascending=not order) + self.layoutChanged.emit() + except Exception as e: + print(e) + + +class SelectionModel(QAbstractTableModel): + """ + Simple class to populate a table view with Selected data + """ + def __init__(self, list, parent=None): + QAbstractTableModel.__init__(self, parent) + self.headers = ['Filename'] + self.list = list + + def rowCount(self, parent=None): + return len(self.list) + + def columnCount(self, parent=None): + return 1 + + def data(self, index, role=Qt.DisplayRole): + if index.isValid(): + if role == Qt.DisplayRole: + return self.list[index.row()] + return None + + def headerData(self, col, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + return self.headers[col] + return None From 08d8d4ffd456154015712cdd033446179e51c998 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Sat, 12 Oct 2019 16:08:25 +0200 Subject: [PATCH 12/13] GUI/GUI: adjusted search button style for visibility --- gui/gui.py | 147 +++++++++++++++++- gui/gui.ui | 431 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 574 insertions(+), 4 deletions(-) diff --git a/gui/gui.py b/gui/gui.py index 6487b3021..2f091c113 100644 --- a/gui/gui.py +++ b/gui/gui.py @@ -269,11 +269,150 @@ def setupUi(self, MainWindow): self.ProgSpinBox.setProperty("value", 0) self.ProgSpinBox.setObjectName("ProgSpinBox") self.horizontalLayout_2.addWidget(self.ProgSpinBox) + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem3) self.SearchPushButton = QtWidgets.QPushButton(self.SearchBox) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(206, 236, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(105, 145, 170)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(206, 236, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(206, 236, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(105, 145, 170)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(206, 236, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(206, 236, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(105, 145, 170)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(78, 109, 127)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(157, 218, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.SearchPushButton.setPalette(palette) self.SearchPushButton.setObjectName("SearchPushButton") self.horizontalLayout_2.addWidget(self.SearchPushButton) - spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_2.addItem(spacerItem3) + spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem4) self.verticalLayout.addWidget(self.SearchBox) self.FilterAddButton = QtWidgets.QPushButton(self.FilterData) palette = QtGui.QPalette() @@ -417,8 +556,8 @@ def setupUi(self, MainWindow): self.FilterAddButton.setFlat(False) self.FilterAddButton.setObjectName("FilterAddButton") self.verticalLayout.addWidget(self.FilterAddButton) - spacerItem4 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) - self.verticalLayout.addItem(spacerItem4) + spacerItem5 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + self.verticalLayout.addItem(spacerItem5) self.FiltertableView = QtWidgets.QTableView(self.FilterData) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) diff --git a/gui/gui.ui b/gui/gui.ui index d01cf553f..c9c65384f 100644 --- a/gui/gui.ui +++ b/gui/gui.ui @@ -704,8 +704,439 @@ + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 157 + 218 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 206 + 236 + 255 + + + + + + + 78 + 109 + 127 + + + + + + + 105 + 145 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 157 + 218 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 206 + 236 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 157 + 218 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 206 + 236 + 255 + + + + + + + 78 + 109 + 127 + + + + + + + 105 + 145 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 157 + 218 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 206 + 236 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 78 + 109 + 127 + + + + + + + 157 + 218 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 206 + 236 + 255 + + + + + + + 78 + 109 + 127 + + + + + + + 105 + 145 + 170 + + + + + + + 78 + 109 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 78 + 109 + 127 + + + + + + + 157 + 218 + 255 + + + + + + + 157 + 218 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 157 + 218 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + Search From 2f7d5ffa6f4cc29a7f80db2767a8b1d6c8db7042 Mon Sep 17 00:00:00 2001 From: mike-ivs Date: Sat, 12 Oct 2019 16:11:37 +0200 Subject: [PATCH 13/13] GUI/MAIN: updated TODO list comments. Corrected TSV directory to STER --- gui/main.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gui/main.py b/gui/main.py index 37255018f..4df144e6e 100644 --- a/gui/main.py +++ b/gui/main.py @@ -26,12 +26,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): - Use plot tab to display matplotlib plot of highlighted spectra TODO: - - I/O functions for subselection? - - Add FITS header/stellar/etc info into new panel below MPL canvas? - - Implement filter functions for overview table (by starname, etc) + - I/O functions for subselection + - Implement more filter functions for overview table (RA,DEC,TIME) + - Add FITS header/stellar/etc info into new panel below MPL canvas + - Integrate with SIMBAD (for search, expanded stellar info, etc) - Integrate fitting/science functions into GUI (i.e. interactive lambda selection for profile fitting, etc) - - Integrate with SIMBAD (for search, expanded stellar info, etc) """ def __init__(self, parent=None): # Initialise the Main window @@ -85,7 +85,7 @@ def Remove_selected(self): def load_overview(self, obs_only): # Load hermes tsv overview into pandas frame - self.overview = pd.read_csv('/lhome/mike/hermes/HermesFullDataOverview.tsv', + self.overview = pd.read_csv('/STER/mercator/hermes/HermesFullDataOverview.tsv', sep='\t', skiprows=2, header=None, names=['unseq', 'prog_id', 'obsmode', 'bvcor', 'observer', 'object', 'ra', 'dec', @@ -172,13 +172,13 @@ def filter_add(self): def Objectfilter(self): newdata = self.overview if len(self.ui.ObjLineEdit.text()): - newdata= newdata[newdata['object'].str.contains( + newdata = newdata[newdata['object'].str.contains( self.ui.ObjLineEdit.text(), na=False, case=False)] if len(self.ui.ObserverLineEdit.text()): - newdata= newdata[newdata['observer'].str.contains( + newdata = newdata[newdata['observer'].str.contains( self.ui.ObserverLineEdit.text(), na=False, case=False)] if self.ui.ProgSpinBox.value(): - newdata= newdata[newdata['prog_id'] == self.ui.ProgSpinBox.value()] + newdata = newdata[newdata['prog_id'] == self.ui.ProgSpinBox.value()] self.filtertab(newdata) if __name__ == "__main__":