Bonjour,

Je réalise une petite application pour visualier le travail fait par un groupe de personne. Chaque personne peut travailler sur plusieur OF (Ordre de Fabrication) dans une journée. Et pour chaque OF de cette personne, je souhaite pouvoir développer une liste avec d'autre information.

Je m'intéresse donc à la création d'un arbre. J'ai suivi la doc de Qt5. Les données s'affichent: 2 lignes pour les 2 opérateurs que je test. Mais quand je veux déployer la liste, je retrouve les mêmes données.

J'ai créé les données comme un table à plusieurs dimensions:
[Opérateur, [Info OF1, Info OF2]]

et Info OF: [OF,Dt début, Dt fin, type fin]

La structure n'ai pas reconnu comme une hierarchie, la documentation parle bien de parent --> enfant, mais je ne vois pas comment le mettre en oeuvre lors du chargement des données.

Voici la déclaration de QAbstractItemModel:
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
 
class ModelOFOP(QtCore.QAbstractItemModel):
    def __init__(self,*args, LsChrono = None, **kwargs):
        super(ModelOFOP,self).__init__(*args,**kwargs)
 
        #Arrangement des données de façon heirarchique:
        # Utilisateur: poste : opération (Séquence|Multi, début, fin)
        #La liste est triée par ordre chronologique et utilisateur.
        self.LsOFOP=[]
 
        #Données temporaires:
        CrtUt = None
        CrtSeq = None
 
        print(LsChrono,sep='\n',end='\n\n')
 
        #Mappage des données (à changer si évolution de la requête)
        self.DataMap = {"ID_User":3,
                   "Seq":1,
                   "Chrono":2,
                   "Multi":5,
                   "Event":4}
 
        for row in LsChrono:
            #Passe à un autre opérateur
            if CrtUt != row[self.DataMap["ID_User"]]:
                self.LsOFOP.append([row[self.DataMap["ID_User"]]])
                CrtUt = row[self.DataMap["ID_User"]]
            #Début d'une séquence:
            if row[self.DataMap["Event"]] == 0:
                self.LsOFOP[-1].append([row[self.DataMap["Seq"]],row[self.DataMap["Chrono"]],None,None])
            #Autre cas: arrêt de la séquence
            else:
                #Enregistre heure de fin
                self.LsOFOP[-1][-1][2]=row[self.DataMap["Chrono"]]
                #Enregistre événement de fin
                self.LsOFOP[-1][-1][3]=row[self.DataMap["Event"]]
        print(self.LsOFOP,sep='\n',end='\n\n')
 
    def data(self,index, role):
        if role == Qt.DisplayRole:            
            if index.column() == 0:
            #Opérateur, à remplacer par le Nom prénom à terme
                print("Colonne 0: %s"%self.LsOFOP[index.row()][0])
                return self.LsOFOP[index.row()][0]
            elif index.column() == 1:
                print("Colonne 1: %s"%self.LsOFOP[index.row()][1][0])
                return self.LsOFOP[index.row()][1][0]
            elif index.column() == 2:
                print("Colonne 2: %s"%self.LsOFOP[index.row()][1][1])
            #Renvoi début, fin et événément
                return self.LsOFOP[index.row()][1][1]
 
    def rowCount(self,index=None):
        return len(self.LsOFOP)
 
    def columnCount(self,index = None):
        return len(self.DataMap)
 
    #Re définition fonction index
    def index(self,row,column,parent=QModelIndex()):
        return self.createIndex(row,column,parent)
 
    #Un seul parent en colonne 0
    def parent(self,child):
        return self.index(child.row(),0)

Nom : Capture Liste OFOP.JPG
Affichages : 749
Taille : 23,4 Ko

Je me doute que ça doit se faire dans la boucle d'enregistrement des données dans l'arbre, mais je ne vois pas comment déclarer le premier parent et les enfants. Pas trouvé de tuto claire sur les arbres non plus.

Si vous avez des pistes. Merci.

Alexis