Bonjour, et merci d'avance pour le soutien que vous m'apportez
Python 3.11.2
Ce code est une application graphique utilisant PyQt6, pour créer une interfaces graphiques. L'application permet de lire un fichier Excel et de l'afficher dans un QTableView

- La signature de la méthode 'PandasModel.data()' ne correspond pas à la signature de la méthode de base de la classe 'QAbstractItemModel' .
- La signature de la méthode 'PandasModel.headerData()' ne correspond pas à la signature de la méthode de base de la classe 'QAbstractItemModel'
- Impossible de trouver la référence 'connect' dans 'pyqtSignal | pyqtSignal'.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()


Salutation et bonne continuation.