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 :

Utiliser QTreeWidget


Sujet :

PyQt Python

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut Utiliser QTreeWidget
    Bonjour,

    Je suis actuellement en train de développer une application avec PyQt5 et python 3.4. Cependant je me heurte a un problème.
    J'ai créer un QTreeWidget qui contient 2 niveaux d'item, les topItems et les subItems. J'aimerais récuperer les données de mon subItem lorsque on clique dessus. ça doit être tout bête mais je loupe quelques chose, je récupère bien la colonne cliqué ainsi que le QTreeWidgetItem selectionné dans la méthode appelée par mon signal, mais je ne comprend pas comment l'utiliser. J'ai bien sur lu la doc, mais je ne trouve pas mon bonheur


    Remplissage du QTreeWidget :

    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
    	def addNodeToTreeview(self, data):
    		self.panelInfoPatientUi.treeWidgetDevices.clear()
    		for item in data: 
    			mainWidgetItem = QtGui.QTreeWidgetItem(self.panelInfoPatientUi.treeWidgetDevices)
    			widgetContainer = QtWidgets.QWidget()
    			widgetContainer.setObjectName("widgetContainer") 
    			deviceWidget = Ui_DeviceListviewWidget()
    			deviceWidget.setupUi(widgetContainer)
     
    			deviceWidget.labelSerialNumber.setText(item.serialNumber)
    			deviceWidget.labelModel.setText(item.model)
    			deviceWidget.labelInstallationDate.setText(item.installDate)
     
     
    			mainWidgetItem.setSizeHint(0, widgetContainer.sizeHint())	
     
    			self.panelInfoPatientUi.treeWidgetDevices.addTopLevelItem(mainWidgetItem)
    			self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(mainWidgetItem, 0, widgetContainer)
     
    			for files in item.listFile:
    				#Files
    				fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
    				widgetContainerFiles = QtWidgets.QWidget()
    				widgetContainerFiles.setObjectName("widgetContainerFiles")
    				fileWidget = Ui_FileListWidgetItem()	
    				fileWidget.setupUi(widgetContainerFiles)
     
    				fileWidget.labelFileName.setText(files.fileName)
    				fileWidget.labelDateFile.setText(files.dateFile)
     
    				fileWidgetItem.setSizeHint(0, widgetContainerFiles.sizeHint())
    				mainWidgetItem.addChild(fileWidgetItem)
    				self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)
    Connexion du signal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	def connectSignalTreeWidget(self):
    		self.view.panelInfoPatientUi.treeWidgetDevices.itemDoubleClicked.connect(self.testest)
    Methode connectée au signal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	def testest(self, data, d2):
     
    		selectedItems = self.view.panelInfoPatientUi.treeWidgetDevices.selectedItems()
    		for selectedItem in selectedItems:
    			print(str(selectedItem.text(0)))
    			print(str(selectedItem.text(1)))
    			print(str(selectedItem.text(2)))		
     
    		'''print("d2" + str(d2))
                    print(str(data))
                    print(data.text(d2))
                    print(data.data(1, 0))
                    print("column count " + str(data.columnCount()))
                    print("AHYAAAAAAAAAA")'''
    Qu'est-ce que loupe ?

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Et comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	def testest(self, item, col):
                print(str(item.text(0)))
                # ou
                print(str(item.text(col)))
                # ou le niveau inférieur selon ton code
                print(str(item.child().text(0)))

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Salut, merci de ta réponse, ça ne marche pas.

    Mon Item n'as pas d'enfant donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     print(str(item.child(0).text(0)))
    retourne None

    Le probleme viens surement de la construction de TreeWidget
    J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Alors tu dois y accéder par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            print(str(item.treeWidget().itemWidget(item, col).text()))
    Que contiennent ces "widgetContainerFiles" de particulier ?

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     print(str(item.treeWidget().itemWidget(item, col).text()))
    AttributeError: 'QWidget' object has no attribute 'text
    WidgetContainerFile contient un QWidget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    				fileWidget = Ui_FileListWidgetItem()	
    				fileWidget.setupUi(widgetContainerFiles)
    FileListWidgetItem lui contient deux labels ,une images et un boutton . c'est ce qui est afficher en tant que subItem dans mon TreeWidget

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Mouais, mais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    item.treeWidget().itemWidget(item, col)
    identifie bien le widget que tu veux ?

    Si c'est le cas il te faut récupérer le label qui t'intéresse.

    Dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print(str(item.treeWidget().itemWidget(item, col).monLabel.text()))

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Encore une fois, merci de prendre le temps de m'aider.

    En fait il me retourne le QWidget conteneur donc c'est sur la bonne voie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
    				widgetContainerFiles = QtWidgets.QWidget()
    				widgetContainerFiles.setObjectName("widgetContainerFiles")
    				fileWidget = Ui_FileListWidgetItem()	
    				fileWidget.setupUi(widgetContainerFiles)
    En fait (Peut être que j'utilise mal hein):
    -1 Je crée mon QTreeWidgetItem et lui assigne son parent (Le TopItem)
    -2 Je créer un conteneur qui contiendra mon widget crée avec QtCreator.
    -3 j'instancie mon widget créer avec QtCreator
    -4 je passe mon conteneur dans la methode setupUI de mon widget perso.

    Donc la avec la ligne que tu m'as donné, j'arrive a accèdé et mon container.
    Mais comment j'arrive a accéder a mon fileWidget ? car c'est lui qui contient mes labels.

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Mais ce "Ui_FileListWidgetItem" est un QWidget lui-même ? Si tu l'as créé avec le Designer, il y a de fortes chances que oui. Et, dans ce cas, tu ne dois pas utiliser le conteneur, c'est lui qui est retourné par le signal et qui t'empêche d'accéder à son contenu.

    Si je comprend bien ton code, tu devrais avoir le même résultat ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    				fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
    				fileWidget = Ui_FileListWidgetItem()	
    				fileWidget.setupUi()
     
    				fileWidget.labelFileName.setText(files.fileName)
    				fileWidget.labelDateFile.setText(files.dateFile)
     
    				mainWidgetItem.addChild(fileWidgetItem)
    				self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, fileWidget)
     
    ...
    	def testest(self, item, col):
                print(str(item.treeWidget().itemWidget(item, col).labelFileName.text()))

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    J'ai pensé pareil mais le code généré par QtCreator demande un QWidget dans la methode setup. Et j'aimerais ne pas modifier le code des fichiers générer (si possible)

    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
    class Ui_FileListWidgetItem(object):
        def setupUi(self, FileListWidgetItem):
            FileListWidgetItem.setObjectName("FileListWidgetItem")
            FileListWidgetItem.resize(400, 40)
            FileListWidgetItem.setMaximumSize(QtCore.QSize(16777215, 40))
            self.gridLayout_3 = QtWidgets.QGridLayout(FileListWidgetItem)
            self.gridLayout_3.setContentsMargins(0, 3, 0, 3)
            self.gridLayout_3.setSpacing(0)
            self.gridLayout_3.setObjectName("gridLayout_3")
            self.widget = QtWidgets.QWidget(FileListWidgetItem)
            self.widget.setMaximumSize(QtCore.QSize(40, 40))
            self.widget.setObjectName("widget")
            self.gridLayout = QtWidgets.QGridLayout(self.widget)
            self.gridLayout.setContentsMargins(0, 0, 0, 0)
            self.gridLayout.setSpacing(0)
            self.gridLayout.setObjectName("gridLayout")
            self.label = QtWidgets.QLabel(self.widget)
            self.label.setText("")
            self.label.setPixmap(QtGui.QPixmap("img/files.png"))
            self.label.setScaledContents(True)
            self.label.setObjectName("label")
            self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
            self.gridLayout_3.addWidget(self.widget, 0, 0, 1, 1)
            self.widget_2 = QtWidgets.QWidget(FileListWidgetItem)
            self.widget_2.setObjectName("widget_2")
            self.gridLayout_2 = QtWidgets.QGridLayout(self.widget_2)
            self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
            self.gridLayout_2.setSpacing(0)
            self.gridLayout_2.setObjectName("gridLayout_2")
            self.labelFileName = QtWidgets.QLabel(self.widget_2)
            self.labelFileName.setObjectName("labelFileName")
            self.gridLayout_2.addWidget(self.labelFileName, 0, 0, 1, 1)
            self.labelDateFile = QtWidgets.QLabel(self.widget_2)
            self.labelDateFile.setObjectName("labelDateFile")
            self.gridLayout_2.addWidget(self.labelDateFile, 1, 0, 1, 1)
            self.gridLayout_3.addWidget(self.widget_2, 0, 1, 1, 1)
            self.widget_3 = QtWidgets.QWidget(FileListWidgetItem)
            self.widget_3.setMaximumSize(QtCore.QSize(75, 16777215))
            self.widget_3.setObjectName("widget_3")
            self.gridLayout_4 = QtWidgets.QGridLayout(self.widget_3)
            self.gridLayout_4.setContentsMargins(0, 0, 0, 0)
            self.gridLayout_4.setSpacing(0)
            self.gridLayout_4.setObjectName("gridLayout_4")
            self.buttonDelete = QtWidgets.QPushButton(self.widget_3)
            self.buttonDelete.setMaximumSize(QtCore.QSize(50, 16777215))
            self.buttonDelete.setText("")
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap("img/trash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.buttonDelete.setIcon(icon)
            self.buttonDelete.setFlat(True)
            self.buttonDelete.setObjectName("buttonDelete")
            self.gridLayout_4.addWidget(self.buttonDelete, 0, 0, 1, 1)
            self.gridLayout_3.addWidget(self.widget_3, 0, 2, 1, 1)
     
            self.retranslateUi(FileListWidgetItem)
            QtCore.QMetaObject.connectSlotsByName(FileListWidgetItem)
     
        def retranslateUi(self, FileListWidgetItem):
            _translate = QtCore.QCoreApplication.translate
            FileListWidgetItem.setWindowTitle(_translate("FileListWidgetItem", "Form"))
            self.labelFileName.setText(_translate("FileListWidgetItem", "File name"))
            self.labelDateFile.setText(_translate("FileListWidgetItem", "Date file"))
     
     
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        FileListWidgetItem = QtWidgets.QWidget()
        ui = Ui_FileListWidgetItem()
        ui.setupUi(FileListWidgetItem)
        FileListWidgetItem.show()
        sys.exit(app.exec_())

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Et que fait le setUp avec ce QWidget, il en fait le parent uniquement ? auquel cas tu peux passer None
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				fileWidget.setupUi(None)
    Ton QTreeWidget devient de toutes façons le parent de ce widget.

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    nop parce que None ne contient pas les methodes : setObjectName ...

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu peux montrer la classe Ui_FileListWidgetItem ?

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Je l'ai postée dans un post précédant.

  14. #14
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Trouvé !

    J'ai modifié la création de mes widgets de cette manière :
    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
     
    	def addNodeToTreeview(self, data):
    		self.panelInfoPatientUi.treeWidgetDevices.clear()
    		for item in data: 
    			mainWidgetItem = QtGui.QTreeWidgetItem(self.panelInfoPatientUi.treeWidgetDevices)
    			widgetContainer = QtWidgets.QWidget()
    			widgetContainer.setObjectName("widgetContainer") 
    			deviceWidget = Ui_DeviceListviewWidget()
    			deviceWidget.setupUi(widgetContainer)
     
    			deviceWidget.labelSerialNumber.setText(item.serialNumber)
    			deviceWidget.labelModel.setText(item.model)
    			deviceWidget.labelInstallationDate.setText(item.installDate)
     
    			mainWidgetItem.setSizeHint(0, widgetContainer.sizeHint())	
     
    			self.panelInfoPatientUi.treeWidgetDevices.addTopLevelItem(mainWidgetItem)
    			self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(mainWidgetItem, 0, widgetContainer)
     
    			for files in item.listFile:
    				#Files
     
    				fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
    				widgetContainerFiles = QtWidgets.QWidget()
    				widgetContainerFiles.setObjectName("widgetContainerFiles")
     
    				widgetContainerFiles.ui = Ui_FileListWidgetItem()
    				widgetContainerFiles.ui.setupUi(widgetContainerFiles)
     
    				widgetContainerFiles.ui.labelFileName.setText(files.fileName)
    				widgetContainerFiles.ui.labelDateFile.setText(files.dateFile)
     
    				fileWidgetItem.setSizeHint(0, widgetContainerFiles.sizeHint())
    				mainWidgetItem.addChild(fileWidgetItem)
    				self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)
    et je récupere mes données comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	def testest(self, item, col):
    		print(str(item.treeWidget().itemWidget(item, col).ui.labelFileName.text()))
    Merci beaucoup pour ton aide !

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par IPreferCSharp Voir le message
    Je l'ai postée dans un post précédant.
    Suis-je bête.

    Mais bon t'as trouvé une solution.

    Moi j'avais trouvé quelque chose de plus compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        def testest(self, item, col):
            for w in item.treeWidget().itemWidget(item, col).children()[2].children():
                if isinstance(w, QtWidgets.QLabel):
                    print(w.text())

  16. #16
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    J'ai testé ta solution, elle fonctionne aussi. Je garde la mienne parce ça me permet de fusionner le conteneur et le widget perso et d'avoir accès aux éléments par leurs noms, surtout que je vais devoir connecter le bouton contenu dans le widget plus tard.

  17. #17
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Points : 218
    Points
    218
    Par défaut
    Pour ceux qui passeront par la, si vous vous demandez comment connecter les boutons moi j'utilise un QSignalMapper, mais a l'heure d'aujourd'hui il semble que cette signature soit bugger : setMapping(QObject * sender, const QString & text)
    du coup obliger de passer par un int, ce qui n'est pas évidant pour les items en hiérarchie.

    du coup ma solution :

    des compteurs !

    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
    	def addNodeToTreeview(self, data, buttonMethod):
    		self.panelInfoPatientUi.treeWidgetDevices.clear()
    		self.fileBtnDeleteSignalMapper = QtCore.QSignalMapper(self)
     
    		self.fileBtnDeleteSignalMapper.mapped.connect(buttonMethod)#CONNECT MAPPER
     
    		itemCounter = 0
    		subItemCounter = 0;
     
    		for item in data: 
    			mainWidgetItem = QtGui.QTreeWidgetItem(self.panelInfoPatientUi.treeWidgetDevices)
    			widgetContainer = QtWidgets.QWidget()
    			widgetContainer.setObjectName("widgetContainer" ) 
    			deviceWidget = Ui_DeviceListviewWidget()
    			deviceWidget.setupUi(widgetContainer)
     
    			deviceWidget.labelSerialNumber.setText(item.serialNumber)
    			deviceWidget.labelModel.setText(item.model)
    			deviceWidget.labelInstallationDate.setText(item.installDate)
     
    			mainWidgetItem.setSizeHint(0, widgetContainer.sizeHint())	
     
    			self.panelInfoPatientUi.treeWidgetDevices.addTopLevelItem(mainWidgetItem)
    			self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(mainWidgetItem, 0, widgetContainer)
     
    			for files in item.listFile:
    				#Files
    				fileWidgetItem = QtGui.QTreeWidgetItem(mainWidgetItem)
    				widgetContainerFiles = QtWidgets.QWidget()
    				widgetContainerFiles.setObjectName("widgetContainerFiles" )
     
    				widgetContainerFiles.ui = Ui_FileListWidgetItem()
    				widgetContainerFiles.ui.setupUi(widgetContainerFiles)
     
    				widgetContainerFiles.ui.labelFileName.setText(files.fileName)
    				widgetContainerFiles.ui.labelDateFile.setText(files.dateFile)
     
    				self.fileBtnDeleteSignalMapper.setMapping(widgetContainerFiles.ui.buttonDelete, itemCounter * 1000 + subItemCounter)
     
    				widgetContainerFiles.ui.buttonDelete.clicked.connect(self.fileBtnDeleteSignalMapper.map) 
     
    				fileWidgetItem.setSizeHint(0, widgetContainerFiles.sizeHint())
    				mainWidgetItem.addChild(fileWidgetItem)
     
    				self.panelInfoPatientUi.treeWidgetDevices.setItemWidget(fileWidgetItem, 0, widgetContainerFiles)
     
    				if subItemCounter < 998 :
    					subItemCounter += 1
    				else:
    					continue;
     
    			subItemCounter = 0;
    			itemCounter += 1
    et la reception de mes signaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	def onButtonDeleteFileClicked(self, data):
    		stringData = str(data)
     
    		topItemIndex = 0;
    		subItemIndex = 0;
     
    		if(len(stringData) <= 3 ):
    			#TopItem 0
    			topItemIndex = 0;
    			subItemIndex = data
    		else:
    			subItemIndex = stringData[-3:]
    			stringData = stringData[:-3]
    			topItemIndex = stringData;
    Voila bonne chance !

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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