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 :

Remplir un tableau (qtablewidget) selon un champ donné dans un qcombobox


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Février 2017
    Messages : 1
    Par défaut Remplir un tableau (qtablewidget) selon un champ donné dans un qcombobox
    Bonjour,
    j'aurais besoin d'afficher une colonne d'un tableau de type qtablewidget selon une valeur dans un qcombobox.
    Exemple :
    QcomboBox affiche "secteur1"
    Alors Colonne1 du qtableWidget affiche N1 valeurs (sec1_ele1, sec1_ele2, .. etc )
    idem pour les secteurs2, etc

    Merci

  2. #2
    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,

    Avec le QComboBox, pour associer la valeur sélectionnée à la liste des données à afficher dans le QTableWidget, il suffit d'avoir créé un dictionnaire dico["secteur1"] = ["sec1_ele1", "sec1_ele2", .. etc ].

    Pour placer des valeurs dans n'importe quelles cases d'un QTableWidget, je crée une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def setCase(table, row, col, val, font=None):
        """Met la chaine val dans la case [row, col] de la table QTableWidget
             avec si nécessaire la police de caractères "font"
           Initialise la case avec un QTableWidgetItem si elle est vide
        """
        item = table.item(row, col)
        if item == None:
            # la case est vide: on lui met un QTableWidgetItem
            item = QtWidgets.QTableWidgetItem()
            table.setItem(row, col, item)
        if font!=None:
            item.setFont(font)
        item.setText(val)
    De même pour lire la valeur de n'importe quelle case:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def getCase(table, row, col):
        """Retourne la chaine de la case [row, col] de la table QTableWidget
           Renvoie None si la case n'a jamais été initialisée
        """
        # recherche d'un éventuel widget dans la case
        item = table.item(row, col)
        if item == None:
            return None # la case n'est pas initialisée
        return item.text()
    Dans les 2 cas, il faut se rappeler que lors de la création du QTableWidget, les cases sont vides. Pour les rendre capables de contenir des données, il faut leur mettre au minimum des QTableWidgetItem.

    A noter qu'on peut aussi leur mettre d'autres widgets dans les cases (QLineEdit, QComboBox, etc...), mais il faudra alors ajouter les tests pour lire et écrire dedans en fonction du type de widgets présents.

    Voilà un petit programme de test qui utilise cela:

    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
    #!/usr/bin/python  
    # -*- coding: utf-8 -*-  
    # Python 3, PyQt5  
     
    import sys  
    import os  
    from PyQt5 import QtCore, QtGui, QtWidgets  
     
    #############################################################################
    def setCase(table, row, col, val, font=None):
        """Met la chaine val dans la case [row, col] de la table QTableWidget
             avec si nécessaire la police de caractères "font"
           Initialise la case avec un QTableWidgetItem si elle est vide
        """
        item = table.item(row, col)
        if item == None:
            # la case est vide: on lui met un QTableWidgetItem
            item = QtWidgets.QTableWidgetItem()
            table.setItem(row, col, item)
        if font!=None:
            item.setFont(font)
        item.setText(val)
     
    #############################################################################
    def getCase(table, row, col):
        """Retourne la chaine de la case [row, col] de la table QTableWidget
           Renvoie None si la case n'a jamais été initialisée
        """
        item = table.item(row, col)
        if item == None:
            return None # la case n'est pas initialisée
        return item.text()
     
    #############################################################################
    class MyTableWidget(QtWidgets.QTableWidget):  
     
        def __init__(self, parent=None):  
            super().__init__(parent)  
            self.resize(550,200)
     
            nblig, nbcol = 5, 5  
            self.setRowCount(nblig)  
            self.setColumnCount(nbcol)  
     
            font = QtGui.QFont()
            font.setItalic(True)
     
            for i in range(0, nblig):  
                for j in range(0, nbcol):  
                    setCase(self, i, j, "case %d,%d" % (i, j), font)                  
                    print(getCase(self, i, j))
     
    #############################################################################
    if __name__ == '__main__':  
        app = QtWidgets.QApplication(sys.argv)  
        window = MyTableWidget()  
        window.show()  
        sys.exit(app.exec_())

Discussions similaires

  1. [Débutant] comment remplir un tableau sous excel avec des données de DGV?
    Par spring.time dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/10/2012, 20h36
  2. Réponses: 5
    Dernier message: 12/04/2011, 15h42
  3. Réponses: 8
    Dernier message: 10/03/2009, 15h25
  4. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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