Bonjour à tous,

je suis un peu désespéré après des heures de recherches et de tentatives pour comprendre ce qu'il se passe dans mon code !

Je développe une app en python 3 avec un gui à base de Pyqt5.

Mon problème se trouve au niveau d'un QListView que je rempli à l'aide d'un modèle.

J'ai trouvé des exemples, et tout fonctionnait correctement. Mais depuis peu, lorsque ma fenêtre s'ouvre, le programme boucle sur la fonction rowCount du modèle de mon listView et j'obtiens l'erreur : "maximum recursion depth exceeded while calling a Python object"

J'ai fini par trouver une ligne qui posait problème dans la fonction data() du modèle du listView :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
serial = index.data().split(" ")[1]
Le problème se trouve au niveau de index.data() qui lorsque elle commentée permet à l'appli de tourner correctement. Or cette partie est essentielle pour mon code.

Je vous laisse l'intégralité du code si quelqu'un voit le soucis, merci d'avance !!!

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
 
fichier 1 : 
 
from datetime import datetime
from PyQt5 import QtCore
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtCore import Qt
import json
import pandas as pd
 
class ListPumpModel(QtCore.QAbstractListModel):
    def __init__(self, pumps, types, *args, **kwargs, ):
        super(ListPumpModel, self).__init__(*args, **kwargs)
        self.pumps = pumps
        self.types = types
 
    def data(self, index, role):
        if role == Qt.DisplayRole:
            serial = index.data().split(" ")[1]
            pump = next(pump for pump in self.datas.pumps if pump.serial == serial)           
            return self.types[str(pump.type)] + " " + pump.serial
 
    def rowCount(self, index):
        return len(self.pumps)
 
class Pump:
 
    def __init__(self, id, loc, type, serial, pms, lochistory):
        """
        init expect : pump type,
        """
        self.id = id
        self.localisation = loc
        self.type = type
        self.serial = serial
        self.pm=[PM(pm) for pm in pms]
        self.lochistory = lochistory
 
    def __str__(self):
        return self.type + " " + self.serial
 
fichier 2 : 
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtCore, QtGui
from PyQt5.uic import loadUi
from model import ListPumpModel, messageBox, Pump
from datetime import date, datetime
 
class PumpWindow(QMainWindow):
    """Main Window."""
    def __init__(self, mainWin, parent=None):
        """Initializer."""
        super(PumpWindow, self).__init__(parent)
        loadUi("pump_manager.ui", self)
        self.datas = mainWin.datas
        self.actionToken = ""
 
        self.initWidgets()       
        self.show()
 
    def initWidgets(self):
        self.entry = QtGui.QStandardItemModel()
        self.loclabel.hide()
        self.loclist.hide()
        self.removelocbutton.hide()
        self.pmlabel.hide()
        self.pmlist.hide()
        self.cancelbutton.hide()
        self.addbutton.clicked.connect(self.addpumpclicked)
        self.cancelbutton.clicked.connect(self.cancelclicked)
        self.validatebutton.clicked.connect(self.validateclicked)
        self.listmodel = ListPumpModel(self.datas.pumps, self.datas.types)
        self.pumplist.setModel(self.listmodel)
        self.pumplist.selectionModel().currentChanged.connect(self.pumpselected)
 
    def pumpselected(self, index):
        if index.data() != None:
            self.showpump(index)       
        else:
            self.deletebutton.setEnabled(False)
            self.validatebutton.setEnabled(False)
            self.comboloc.setCurrentIndex(0)
            self.combotype.setCurrentIndex(0)
            self.lineserial.setText("")