1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| import os
import sys
import pandas as pd
from PyQt6 import QtWidgets, QtCore
class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, data):
super().__init__()
self._data = data
def rowCount(self, parent=None):
return len(self._data.index)
def columnCount(self, parent=None):
return len(self._data.columns)
def data(self, index, role):
if role == QtCore.Qt.ItemDataRole.DisplayRole:
return str(self._data.iloc[index.row(), index.column()])
def headerData(self, section, orientation, role):
if role == QtCore.Qt.ItemDataRole.DisplayRole:
if orientation == QtCore.Qt.Orientation.Horizontal:
return self._data.columns[section]
else:
return str(self._data.index[section])
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.resize(1015, 593)
# Récupère le chemin absolu du répertoire du script principal
main_dir = os.path.dirname(os.path.abspath(__file__))
# Construit le chemin absolu du répertoire articles_analyse
self.directory = os.path.join(main_dir, "..", "..", "articles_analyse")
# Crée un menu principal
menu = self.menuBar()
file_menu = menu.addMenu("Fichier")
# Ajoute les commandes "Importer" et "Quitter" au sous-menu "Fichier"
file_menu.addAction("Importer", self.import_file)
file_menu.addAction("Quitter", self.close)
# Ajoute un nouveau menu "Outils" à côté du menu "Fichier"
tools_menu = menu.addMenu("Outils")
# Ajoute la commande "Descriptions similaires"
find_similar_action = tools_menu.addAction("Descriptions similaires")
find_similar_action.setEnabled(False)
# Stocke l'action find_similar_action dans une variable d'instance pour y accéder plus tard
self.find_similar_action = find_similar_action
def import_file(self):
filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Sélectionner un fichier", self.directory,
"Fichiers Excel (*.xlsx *.xls *.xlsm)")
if filename:
# Lit le fichier Excel et stocke les données dans un DataFrame
df = pd.read_excel(filename)
# Stocke les données du DataFrame dans une variable d'instance pour y accéder plus tard
self._data = df
# Créez un widget QTabWidget
tab_widget = QtWidgets.QTabWidget()
# Créez le premier onglet
tab1 = QtWidgets.QWidget()
tab1_layout = QtWidgets.QVBoxLayout()
tab1_table = QtWidgets.QTableView()
tab1_layout.addWidget(tab1_table)
tab1.setLayout(tab1_layout)
tab_widget.addTab(tab1, "Page 1")
# Définissez le modèle pour le QTableView en utilisant les données de votre DataFrame
model = PandasModel(df)
tab1_table.setModel(model)
# Connectez le signal clicked de votre QTableView à la méthode on_table_clicked
tab1_table.clicked.connect(self.on_table_clicked)
# Crée une disposition horizontale pour organiser les widgets
layout = QtWidgets.QHBoxLayout()
# Ajoutez le QTabWidget à la disposition
layout.addWidget(tab_widget)
# Crée un widget central pour contenir la disposition
central_widget = QtWidgets.QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def on_table_clicked(self, index):
# Vérifiez si la cellule cliquée est dans la colonne SIMILARITY
if index.column() == self._data.columns.get_loc("SIMILARITY"):
# Vérifiez si la valeur de la cellule n'est pas 0
if self._data.iloc[index.row(), index.column()] != 0:
# Activez l'action Descriptions similaires
self.find_similar_action.setEnabled(True)
return
# Désactivez l'action Descriptions similaires
self.find_similar_action.setEnabled(False)
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec() |
Partager