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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 confirmé
    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
    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 confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 confirmé
    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
    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 confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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()))

+ 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