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 :

Éditer/récupérer le contenu d'un tableau [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut Éditer/récupérer le contenu d'un tableau
    Bonjour à tous,
    Aujourd'hui, je suis confronté à un problème avec les QTableWidget. En effet, le but de mon programme est d'ouvrir un fichier du type texte et d'en récupérer son contenu (en l'occurrence, c'est une liste qu'il contient), puis d'afficher celui-ci dans un tableau. Jusque là pas de problème, le tout s'affiche. Mais je cherche désespérément à pouvoir éditer le contenu d'un item du tableau ou de récupérer son contenu depuis mon code.
    J'ai donc cherché et trouvé sur internet ce type de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=self.ui.tableau.item(ligne,colonne)
    print(a.data(0).toString())
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=self.ui.table.item(X,Y)
    print(a.text())
    Mais ces deux essais sont sans succès, Python me retourne l'erreur 'NoneType' object has no attribute 'data' ou 'NoneType' object has no attribute 'text'
    Du coup si quelqu'un à une idée, 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,

    Je pense que tu as simplement un soucis quand à l'identification de tes objets.

    tableau dans le premier exemple et table dans le second ?

    Ou, éventuellement, tes ligne-colonne sont hors maximums. (columnCount(), rowCount())

    Quoiqu'il en soit, ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i in range(0, self.table.rowCount()):
        print unicode(self.table.item(i, 0).text())
    me retourne bien les contenus de la première colonne.

    Utilise des print pour identifier tes objets.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut
    Bonjour et merci de ta réponse
    Pour le soucis d'identification, c'est ma faute, les deux s'appellent bien tableau.
    Malheureusement, j'ai essayé ce que tu m'as proposé mais ça ne fonctionne pas :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for X in range(50):
           print(str(self.ui.tableau.item(0, X)).text())
    Python me retourne : AttributeError: 'str' object has no attribute 'text'

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est normal: c'est la conversion str qui devrait englober .text() et non s'arrêter à item. Essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for X in range(50):
        print(str(self.ui.tableau.item(0, X).text()))

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut
    Bonjour et merci de ta réponse, je viens d'essayer ton code, mais il me retourne encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'NoneType' object has no attribute 'text'

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Alors tu cherches à obtenir un contenu texte dans une case qui ne contient rien.

    En effet, un QTableWidget se crée avec des cases complètement vides. Pour les remplir, il faut mettre des QTableWidgetItem initialisés avec une chaine vide. Si ce n'est pas le cas, item renvoie None.

    Pour se "débarrasser" de ce genre de problème, j'utilise 2 fonctions du genre de celle-ci (Python 2.7):

    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
    #############################################################################
    def setcase(table, row, col, val):
        """met la valeur val dans la case [row, col] de la table (QTableWidget)
           val est en unicode
        """
        # recherche d'un éventuel QTableWidgetItem dans la case
        item = table.item(row, col)
        if item == None:
            # la case n'a jamais été initialisée: on lui met un QTableWidgetItem
            item = QtGui.QTableWidgetItem()
            table.setItem(row, col, item)
        # et on met la valeur fournie
        item.setText(val)
     
    #############################################################################
    def getcase(table, row, col):
        """Retourne la valeur (unicode) de la case [row, col] de la table"""
        # recherche d'un éventuel QTableWidgetItem dans la case
        item = table.item(row, col)
        if item == None:
            # la case n'a jamais été initialisée: on retourne une chaine vide
            return u""
        else:
            return unicode(item.text())
    Bien entendu, si on place d'autres widgets d'autres types dans certaines cases (combobox, etc...), il faut modifier ces fonctions pour en tenir compte.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/06/2011, 19h27
  2. Récupèrer le contenu d'un tableau html
    Par solicel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2009, 16h37
  3. Récupérer le contenu d'un tableau
    Par KDavid dans le forum Langage
    Réponses: 7
    Dernier message: 16/03/2009, 13h32
  4. Réponses: 8
    Dernier message: 21/12/2007, 16h42
  5. Réponses: 2
    Dernier message: 04/06/2007, 13h57

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