diff --git a/View/about_window.py b/View/about_window.py index d5a719d..56da4d5 100644 --- a/View/about_window.py +++ b/View/about_window.py @@ -23,6 +23,27 @@ from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtWidgets import (QWidget, QLabel, QHBoxLayout, QVBoxLayout, QApplication, QMainWindow, QGridLayout, QDialog, QDialogButtonBox, QPushButton, QTextEdit, QFrame, QLineEdit) from PyQt5.QtCore import Qt +import os + + +class Logos(): + + def __init__(self): + + self.logo_AcouSed = (os.path.join('logos', "AcouSed.png")) + + self.logo_INRAE = (os.path.join('logos', "BlocMarque-INRAE-Inter.jpg")) + + self.logo_OSR = (os.path.join('logos', "OSR.png")) + self.logo_europe = (os.path.join('logos', "Europe.png")) + self.logo_saone_rhone = (os.path.join('logos', "plan_Rhone_Saone.png")) + self.logo_carnot = (os.path.join('logos', "Carnot_EE.png")) + + self.logo_CNR = (os.path.join('logos', "CNR.png")) + self.logo_EDF = (os.path.join('logos', "EDF.png")) + self.logo_Ubertone = (os.path.join('logos', "Ubertone.jpg")) + +logos_inst = Logos() class AboutWindow(QDialog): @@ -31,12 +52,6 @@ class AboutWindow(QDialog): super().__init__() - self.logo_path = "./logos" - self.logo_AcouSed = QPixmap(self.logo_path + "/" + "AcouSed.png") - self.logo_AcouSed.scaled(16, 16, Qt.KeepAspectRatio, Qt.SmoothTransformation) - - self.logo_INRAE = QPixmap(self.logo_path + "/" + "BlocMarque-INRAE-Inter.jpg") - self.setGeometry(400, 200, 350, 200) self.setWindowTitle("About AcouSed") @@ -50,7 +65,8 @@ class AboutWindow(QDialog): # ---------------------------------------------------------- self.label_logo_AcouSed = QLabel() - self.label_logo_AcouSed.setPixmap(self.logo_AcouSed.scaledToHeight(128, Qt.SmoothTransformation)) + self.label_logo_AcouSed.setPixmap(QPixmap(logos_inst.logo_AcouSed). + scaledToHeight(128, Qt.SmoothTransformation)) self.gridLayout.addWidget(self.label_logo_AcouSed, 0, 0, 5, 1, Qt.AlignCenter) self.label_acoused = QLabel() @@ -64,7 +80,7 @@ class AboutWindow(QDialog): self.gridLayout.addWidget(self.label_date, 1, 1, 1, 1, Qt.AlignCenter) self.label_logo_INRAE = QLabel() - self.label_logo_INRAE.setPixmap(self.logo_INRAE.scaledToHeight(42, Qt.SmoothTransformation)) + self.label_logo_INRAE.setPixmap(QPixmap(logos_inst.logo_INRAE).scaledToHeight(42, Qt.SmoothTransformation)) self.gridLayout.addWidget(self.label_logo_INRAE, 2, 1, 1, 1, Qt.AlignCenter) self.label_contact = QLabel() @@ -103,11 +119,17 @@ class AboutWindow(QDialog): self.button_Copyright.clicked.connect(self.copyright_window) - self.button_Support = QPushButton() - self.button_Support.setText("Support") - self.gridLayout_button.addWidget(self.button_Support, 0, 2, 1, 1) + self.button_FundsPartners = QPushButton() + self.button_FundsPartners.setText("Funds/Patners") + self.gridLayout_button.addWidget(self.button_FundsPartners, 0, 2, 1, 1) - self.button_Support.clicked.connect(self.support_window) + self.button_FundsPartners.clicked.connect(self.funds_partners_window) + + self.button_Authors = QPushButton() + self.button_Authors.setText("Authors") + self.gridLayout_button.addWidget(self.button_Authors, 0, 3, 1, 1) + + self.button_Authors.clicked.connect(self.authors_window) def licence_window(self): lw = Licence() @@ -117,8 +139,12 @@ class AboutWindow(QDialog): cw = Copyright() cw.exec() - def support_window(self): - sw = Support() + def funds_partners_window(self): + sw = FundsPartners() + sw.exec() + + def authors_window(self): + sw = Authors() sw.exec() @@ -149,7 +175,7 @@ class Licence(QDialog): "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details. \n\n" "You should have received a copy of the GNU General Public License \n" - "along with this program. If not, see .") + "along with this program. If not, see https://www.gnu.org/licenses/.") class Copyright(QDialog): @@ -158,9 +184,6 @@ class Copyright(QDialog): super().__init__() - self.logo_path = "./Logo" - self.logo_INRAE = QPixmap(self.logo_path + "/" + "BlocMarque-INRAE-Inter.jpg") - self.setWindowTitle("Copyright") self.setGeometry(500, 300, 200, 200) @@ -175,24 +198,17 @@ class Copyright(QDialog): "All Rights Reserved.") self.label_INRAE = QLabel() - self.label_INRAE.setPixmap(self.logo_INRAE.scaledToHeight(64, Qt.SmoothTransformation)) + self.label_INRAE.setPixmap(QPixmap(logos_inst.logo_INRAE).scaledToHeight(64, Qt.SmoothTransformation)) self.gridLayout.addWidget(self.label_INRAE, 1, 0, 1, 1, Qt.AlignCenter) -class Support(QDialog): +class FundsPartners(QDialog): def __init__(self): super().__init__() - self.logo_path = "./logos" - - self.logo_OSR = QPixmap(self.logo_path + '/' + "OSR.png") - self.logo_CNR = QPixmap(self.logo_path + '/' + "CNR.png") - self.logo_EDF = QPixmap(self.logo_path + '/' + "EDF.png") - self.logo_Ubertone = QPixmap(self.logo_path + '/' + "Ubertone.jpeg") - - self.setWindowTitle("Support") + self.setWindowTitle("Funds/Partners") self.setGeometry(500, 300, 300, 300) @@ -200,28 +216,85 @@ class Support(QDialog): self.setLayout(self.gridLayout) self.label_support = QLabel() - self.label_support.setText("The development of AcouSed was supported by OSR6 and CNR Company.") - self.gridLayout.addWidget(self.label_support, 0, 0, 1, 2, Qt.AlignLeft) + self.label_support.setText("The development of AcouSed software was funded by OSR, Carnot Eau & Environnement, INRAE and CNR Company. \n " + "It was made in collaboration with Ubertone and EDF Companies.") + self.gridLayout.addWidget(self.label_support, 0, 0, 1, 4, Qt.AlignLeft) self.label_OSR = QLabel() - self.label_OSR.setPixmap(self.logo_OSR.scaledToHeight(96, Qt.SmoothTransformation)) + self.label_OSR.setPixmap(QPixmap(logos_inst.logo_OSR).scaledToHeight(78, Qt.SmoothTransformation)) self.gridLayout.addWidget(self.label_OSR, 1, 0, 1, 1, Qt.AlignCenter) - self.label_CNR = QLabel() - self.label_CNR.setPixmap(self.logo_CNR.scaledToHeight(32, Qt.SmoothTransformation)) - self.gridLayout.addWidget(self.label_CNR, 1, 1, 1, 1, Qt.AlignCenter) + self.label_EUROPE = QLabel() + self.label_EUROPE.setPixmap(QPixmap(logos_inst.logo_europe).scaledToHeight(32, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_EUROPE, 1, 1, 1, 1, Qt.AlignCenter) - self.label_collaboration = QLabel() - self.label_collaboration.setText("It was made in collaboration with Ubertone and EDF Companies.") - self.gridLayout.addWidget(self.label_collaboration, 2, 0, 1, 2, Qt.AlignLeft) + self.label_SAONE_RHONE = QLabel() + self.label_SAONE_RHONE.setPixmap(QPixmap(logos_inst.logo_saone_rhone).scaledToHeight(64, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_SAONE_RHONE, 1, 2, 1, 1, Qt.AlignCenter) + + self.label_CARNOT = QLabel() + self.label_CARNOT.setPixmap(QPixmap(logos_inst.logo_carnot).scaledToHeight(78, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_CARNOT, 1, 3, 1, 1, Qt.AlignCenter) + + self.label_INRAE = QLabel() + self.label_INRAE.setPixmap(QPixmap(logos_inst.logo_INRAE).scaledToHeight(32, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_INRAE, 2, 0, 1, 1, Qt.AlignCenter) + + self.label_CNR = QLabel() + self.label_CNR.setPixmap(QPixmap(logos_inst.logo_CNR).scaledToHeight(32, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_CNR, 2, 1, 1, 1, Qt.AlignCenter) self.label_Ubertone = QLabel() - self.label_Ubertone.setPixmap(self.logo_Ubertone.scaledToHeight(48, Qt.SmoothTransformation)) - self.gridLayout.addWidget(self.label_Ubertone, 3, 0, 1, 1, Qt.AlignCenter) + self.label_Ubertone.setPixmap(QPixmap(logos_inst.logo_Ubertone).scaledToHeight(24, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_Ubertone, 2, 2, 1, 1, Qt.AlignCenter) self.label_EDF = QLabel() - self.label_EDF.setPixmap(self.logo_EDF.scaledToHeight(48, Qt.SmoothTransformation)) - self.gridLayout.addWidget(self.label_EDF, 3, 1, 1, 1, Qt.AlignCenter) + self.label_EDF.setPixmap(QPixmap(logos_inst.logo_EDF).scaledToHeight(48, Qt.SmoothTransformation)) + self.gridLayout.addWidget(self.label_EDF, 2, 3, 1, 1, Qt.AlignCenter) + + +class Authors(QDialog): + + def __init__(self): + + super().__init__() + + self.setWindowTitle("Authors") + + self.setGeometry(500, 300, 300, 200) + + self.gridLayout = QGridLayout() + self.setLayout(self.gridLayout) + + self.label_adrien = QLabel() + self.label_adrien.setText("The development of AcouSed was based on Adrien VERGNE's PhD thesis work :") + self.gridLayout.addWidget(self.label_adrien, 0, 0, 1, 1, Qt.AlignLeft) + + self.label_adrien_thesis = QLabel() + self.label_adrien_thesis.setText( + " - Adrien Vergne thesis (2018): " + "< a href = https://theses.fr/2018GREAU046 > https://theses.fr/2018GREAU046 ") + self.gridLayout.addWidget(self.label_adrien_thesis, 1, 0, 1, 1) + + self.label_adrien_2020 = QLabel() + self.label_adrien_2020.setText( + " - Vergne A., Le Coz J., Berni C., & Pierrefeu G. (2020), Water Resources Research, 56(2): " + "< a href = https://doi.org/10.1029/2019WR024877 > https://doi.org/10.1029/2019WR024877 ") + self.gridLayout.addWidget(self.label_adrien_2020, 2, 0, 1, 1) + + self.label_adrien_2021 = QLabel() + self.label_adrien_2021.setText( + " - Vergne A., Berni C., Le Coz J., & Tencé F., (2021), Water Resources Research, 57(9): " + "< a href = https://doi.org/10.1029/2021WR029589 > https://doi.org/10.1029/2021WR029589 ") + self.gridLayout.addWidget(self.label_adrien_2021, 3, 0, 1, 1) + + self.label_brahim = QLabel() + self.label_brahim.setText("\n Acoused was designed and developped by Brahim MOUDJED from 2022 to 2025. \n") + self.gridLayout.addWidget(self.label_brahim, 4, 0, 1, 1) + + self.label_PA = QLabel() + self.label_PA.setText("TECC company (< a href = https://parouby.fr/ > https://parouby.fr/ ) was involved in 2025 to improve program architecture.") + self.gridLayout.addWidget(self.label_PA, 5, 0, 1, 1) # if __name__ == "__main__": diff --git a/View/sample_data_tab.py b/View/sample_data_tab.py index 8697557..dd9f673 100644 --- a/View/sample_data_tab.py +++ b/View/sample_data_tab.py @@ -28,6 +28,7 @@ import pandas as pd import itertools import matplotlib.pyplot as plt +# from QtCore.QByteArray import length from matplotlib.colors import LogNorm, BASE_COLORS from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolBar @@ -189,6 +190,9 @@ class SampleDataTab(QWidget): self.combobox_x_axis = QComboBox() self.combobox_x_axis.addItems(['Concentration (g/L)', 'Concentration (%)']) + self.combobox_x_axis.setItemData(1, + "FINE : 100 * Cfine / (Cfine + Csand) | SAND : 100 * Csand / (Cfine + Csand)" + , Qt.ToolTipRole) self.gridLayout_groupbox_option_total_concentration_plot.addWidget(self.combobox_x_axis, 0, 1) self.label_y_axis = QLabel() @@ -246,6 +250,9 @@ class SampleDataTab(QWidget): self.pushbutton_plot_transect.clicked.connect(self.fill_comboboxes_and_plot_transect) + self.combobox_x_axis.currentIndexChanged.connect(self.plot_total_concentration) + self.combobox_y_axis.currentIndexChanged.connect(self.plot_total_concentration) + self.combobox_PSD_plot.currentTextChanged.connect(self.plot_PSD_fine_and_sand_sediments) # -------------------- Functions for Sample Data Tab -------------------- @@ -450,6 +457,8 @@ class SampleDataTab(QWidget): i, 0, self.comboBox_sample_table_fine[i] ) + self.comboBox_sample_table_fine[i].setCurrentIndex(i % len(list(color_list.keys()))) + self.comboBox_sample_table_fine[i]\ .currentTextChanged\ .connect(self.plot_total_concentration) @@ -495,8 +504,8 @@ class SampleDataTab(QWidget): self.tableWidget_fine.itemChanged.connect(self.plot_total_concentration) self.tableWidget_fine.itemChanged.connect(self.plot_PSD_fine_and_sand_sediments) - self.combobox_x_axis.currentIndexChanged.connect(self.plot_total_concentration) - self.combobox_y_axis.currentIndexChanged.connect(self.plot_total_concentration) + # self.combobox_x_axis.currentIndexChanged.connect(self.plot_total_concentration) + # self.combobox_y_axis.currentIndexChanged.connect(self.plot_total_concentration) self.tableWidget_fine.blockSignals(False) else: @@ -543,6 +552,8 @@ class SampleDataTab(QWidget): i, 0, self.comboBox_sample_table_sand[i] ) + self.comboBox_sample_table_sand[i].setCurrentIndex(i % len(list(color_list.keys()))) + self.comboBox_sample_table_sand[i]\ .currentTextChanged\ .connect(self.plot_total_concentration) @@ -1391,6 +1402,11 @@ class SampleDataTab(QWidget): else: + self.tableWidget_fine.blockSignals(True) + self.tableWidget_sand.blockSignals(True) + self.combobox_x_axis.blockSignals(True) + self.combobox_y_axis.blockSignals(True) + self.verticalLayout_groupbox_plot_total_concentration.removeWidget(self.canvas_plot_total_concentration) self.verticalLayout_groupbox_plot_total_concentration.removeWidget(self.toolbar_plot_total_concentration) @@ -1656,6 +1672,11 @@ class SampleDataTab(QWidget): self.axis_total_concentration.legend(loc="upper right") self.figure_total_concentration.canvas.draw_idle() + self.tableWidget_fine.blockSignals(False) + self.tableWidget_sand.blockSignals(False) + self.combobox_x_axis.blockSignals(False) + self.combobox_y_axis.blockSignals(False) + def plot_PSD_fine_and_sand_sediments(self): """ Update the plot of Particle Size Distribution according to choices of x-axis and y-axis combo-boxes """ diff --git a/logos/Carnot_EE.png b/logos/Carnot_EE.png new file mode 100644 index 0000000..0baa46a Binary files /dev/null and b/logos/Carnot_EE.png differ diff --git a/logos/Europe.png b/logos/Europe.png new file mode 100644 index 0000000..c5a191e Binary files /dev/null and b/logos/Europe.png differ diff --git a/logos/Ubertone.jpeg b/logos/Ubertone.jpeg deleted file mode 100644 index 0d3e2f0..0000000 Binary files a/logos/Ubertone.jpeg and /dev/null differ diff --git a/logos/Ubertone.jpg b/logos/Ubertone.jpg new file mode 100644 index 0000000..ccf411f Binary files /dev/null and b/logos/Ubertone.jpg differ diff --git a/logos/plan_Rhone_Saone.png b/logos/plan_Rhone_Saone.png new file mode 100644 index 0000000..d68969f Binary files /dev/null and b/logos/plan_Rhone_Saone.png differ