IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

QTreeWidget - clicked vs itemSelectionChanged


Sujet :

PyQt Python

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut QTreeWidget - clicked vs itemSelectionChanged
    Bonjour,

    Je remets le nez dans un code que je n'ai pas touché depuis quelques mois et j'essaye d'améliorer l'ergonomie de l'interface.

    Pour décrire rapidement l'interface, j'ai d'un coté un QTreeWidget qui me liste des items et sous items.
    Et de l'autre coté de l'interface, plusieurs champs qui sortent des infos associés à ces items.

    Jusqu'ici j'utilisais une ligne de code du type "self.dataview.clicked.connect(self.on_nb_selected)" et à chaque clic de souris ma fonction s'exécute parfaitement

    Pour gagner en ergonomie, j'aimerai pouvoir me déplacer dans la liste du QTreeWidget avec les fleches haut et bas, et voir ma partie description se mettre à jour automatiquement.
    J'ai donc remplacé clicked par itemSelectionChanged, là aussi la fonction s'exécute bien par contre l'item dans la liste n'est plus sélectionné, on ne peut pas naviguer au clavier

    Je ne sais pas si c'est normal ou si c'est une erreur de programmation de ma part, je suis preneur de vos commentaires

    Je vous donne une version simplifiée de mon code si ça peut aider


    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    """
        class for the tab UI
    """
     
    from PyQt5.QtWidgets import (QLabel, QGridLayout, QWidget, QTabWidget,
                                 QTreeWidget, QTreeWidgetItem)
    from PyQt5.QtGui import QIcon
    from PyQt5 import QtWidgets
    import sys
     
    import random
     
    class MaList(QTreeWidget):
     
        def __init_(self):
            QTreeWidget.__init_(self)
     
            self.setColumnCount(1)
            self.setHeaderLabels([("Name")])
     
            self.view_dict_in= {}
            self.view_dict_out= {}
            self.in_items = QTreeWidgetItem([("In")])
            self.out_items = QTreeWidgetItem([("Out")])
     
            self.refresh()
            self.expandAll()
     
        def refresh(self):
     
            # to save qtreeview expanded state
            in_items_is_expanded = self.in_items.isExpanded()
            out_items_is_expanded = self.out_items.isExpanded()
     
            # to refresh the list        
            self.clear()
            self.view_dict_in= {}
            self.view_dict_out= {}
     
            self.in_items = QTreeWidgetItem([("In")])
            self.out_items = QTreeWidgetItem([("Out")])
     
            row_in=0
            row_out=0
            for row in range(1,10):
                nb_aleatoire = random.randint(1,1000)
                data=QTreeWidgetItem(str(nb_aleatoire))
                print(nb_aleatoire)
                if nb_aleatoire % 2 == 0 :
                    self.in_items.addChild(data)
                    self.view_dict_in[nb_aleatoire] = row_in
                    row_in+=1
                else :
                    self.out_items.addChild(data)
                    self.view_dict_out[nb_aleatoire] = row_out
                    row_out+=1
     
            self.addTopLevelItem(self.in_items)
            self.addTopLevelItem(self.out_items)
     
            # to restore Qtreeview expanded state
            self.in_items.setExpanded(in_items_is_expanded)
            self.out_items.setExpanded(out_items_is_expanded)
     
        def get_selection(self):
            row = self.currentIndex().row()  # row
            cat = self.currentIndex().parent().row()  # in/out
            if row == -1 or cat == -1:
                return None
            else:
                if cat == 0 or cat == 1:
                    if cat == 0:
                        nb_aleatoire = reverse_dict(self.view_dict_in, row)
                    else:
                        nb_aleatoire = reverse_dict(self.view_dict_out, row)
                    return nb_aleatoire
                else:
                    pass
     
    class MonWidget(QWidget):
        "widget that define what is inside my tab"
     
        def __init_(self):
            QWidget.__init_(self)
     
            # #########
            # left side
            # #########
     
            self.dataview = MaList(self)
            # clicked fonctionne, navigation clavier ok, mais pas de mise à jour
            self.dataview.clicked.connect(self.on_nb_selected)
            # itemSelectionChanged fonctionne, navigation clavier nok, mais pas de mise à jour
            #self.dataview.itemSelectionChanged.connect(self.on_nb_selected)
            # currentItemChanged ne fonctionne pas
            #self.dataview.currentItemChanged.connect(self.on_nb_selected)
     
            # #########
            # right side
            # #########
            self.label_nb_name = QLabel("<h1> Test </h1>")
     
            # add treeview 
            gridlayout = QGridLayout(self)
     
            # add left and right side
            # add treeview and tabs 
            gridlayout.addWidget(self.dataview, 0, 0, 9, 3)
            gridlayout.addWidget(self.label_nb_name, 0, 3, 0, 7)
     
        def on_nb_selected(self):
            "update display when a item is selected"
     
            nb = self.dataview.get_selection()
            self.label_nb_name.setText("<h1>" + nb + "</h1>")
     
     
    if __name__ == "__main__":
     
        APP = QtWidgets.QApplication(sys.argv)
        MAINWIN = MonWidget()
        #MAINWIN = MaList()
        MAINWIN.show()
        sys.exit(APP.exec_())

  2. #2
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    bon, désolé du dérangement
    j'ai finalement trouvé la source du problème, j'avais un autre connect ailleurs qui me foutait le bordel ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/01/2008, 17h08
  2. [C#] Simuler un Click souris
    Par helmout dans le forum Windows Forms
    Réponses: 13
    Dernier message: 13/12/2007, 01h59
  3. [AppMessage] Comment empêcher un click de la souris ?
    Par altahir007 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/10/2003, 14h28
  4. Modifier l'icone d'un TTreeNode sur click
    Par ramseb dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/08/2003, 13h55
  5. [Kylix] Simluler des click souris
    Par paci dans le forum EDI
    Réponses: 2
    Dernier message: 24/06/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo