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 :

[PyQt4] Checkbox non souhaitées dans les cellules de ma QTableView


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut [PyQt4] Checkbox non souhaitées dans les cellules de ma QTableView
    Bonjour,

    Je suis en train de me mettre à la création de GUI en Python grâce au package 'PyQt4'.
    Ayant un certain nombre de données à afficher, je me suis tourner vers QTableView.

    J'ai commencé avec des fonctions de bases pour insérer du texte dans les cellules, changer les headers, ajouter des lignes...etc
    Tout fonctionne plus ou moins (Je ne m'attarde pas encore sur le coté "beau" mais plutôt "fonctionnel" pour l'instant ).

    Seul soucis, j'arrive bien à insérer du texte dans les cellules de ma QTableView, mais celui-ci est précédé d'une sorte de checkbox dont je ne comprend pas l'existence.

    Voici mon code:
    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
    import sys 
    from PyQt4 import QtGui, QtCore, uic
     
    class myModel(QtCore.QAbstractTableModel):
     
        def __init__(self, myData = [[]], headers = [], parent = None):
        	QtCore.QAbstractTableModel.__init__(self, parent)
        	self.myData = myData
        	self.headers = headers
     
        def rowCount(self, parent):
            return len(self.myData)
     
        def columnCount(self, parent):
            return len(self.myData[0])
     
        def data(self, index, role):
            row = index.row()
            column = index.column()
            value = self.myData[row][column]
            return value
     
        def insertRows(self, position, rows, parent = QtCore.QModelIndex()):
            print('Inserting...')
            self.beginInsertRows(parent, position, position + rows - 1)
            defaultValues = ['Test' for i in range(self.columnCount(None))]
            self.myData.insert(position, defaultValues)
            self.endInsertRows()
            return True          
     
    if __name__ == '__main__':
     
        app = QtGui.QApplication(sys.argv)
        tableView = QtGui.QTableView()
        tableView.show()
        tableView.setGeometry(100,100,700,300)
        rowCount = 4
        columnCount = 6
     
        headers = ["J" + str(i) for i in range(columnCount)]
        tableData = [ [ str(i*j) for i in range(columnCount)] for j in range(rowCount)]
     
        model = myModel(tableData, headers)
        model.insertRows(0, 1)
        tableView.setModel(model)
        sys.exit(app.exec_())
    Et une petit aperçu du rendu:

    Nom : Capture d’écran 2016-02-22 à 21.03.37.png
Affichages : 1176
Taille : 31,8 Ko

    A part dans cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QtCore.QAbstractTableModel.__init__(self, parent)
    Je ne vois pas d'où cela peut venir.

    PS: Je suis sous Mac OSX Lion 10.7.5.

    Merci de votre aide éventuelle et n'hésitez pas si vous avez des questions ou même de simple remarque sur ma façon de coder et comment améliorer certains points
    Bonne soirée
    Chipss

  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,

    la méthode data() doit tenir compte du type de données (appelée role ici)

    Ce petit changement aide à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        def data(self, index, role):
            print('data role: %s' % role)
            if role != QtCore.Qt.DisplayRole:
                return
     
            row = index.row()
            column = index.column()
            value = self.myData[row][column]
            return value
    Un moteur de recherche idéal quand on se lance dans PyQt:
    http://nullege.com/

  3. #3
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 168
    Points : 123
    Points
    123
    Par défaut
    Hello VinsS,

    Tout d'abord merci pour ta réponse.
    A partir de ton extrait de code, j'ai adapté ma méthode data, comme suit, afin de n'avoir que le texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def data(self, index, role):
            row = index.row()
            column = index.column()
            value = self.myData[row][column]
            if role == QtCore.Qt.DisplayRole:
            	return value
    Je n'ai pas trop le temps de creuser, mais j'imagine que ce champs rôle permet de trier le type de données que reçois la cellule

    En faisant ceci, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def data(self, index, role):
            row = index.row()
            column = index.column()
            value = self.myData[row][column]
            if role != QtCore.Qt.DisplayRole:
            	return value
    je n'ai plus que les checkbox.

    Maintenant, je dois toujours comprendre pourquoi ces checkboxes sont passées dans ma méthode et surtout pourquoi certaines sont cochées et pas d'autre.
    En cherchant un peu j'ai vu qu'il y avait d'autre param semblables à QtCore.Qt.DisplayRole tel que QtCore.Qt.UserRole. Sais-tu où je peux trouve la liste exaustive?

    Bref, j'essayerai de m'y remettre avant ce week-end.

    Merci en tout cas

    Par contre j'ai regardé ton lien, qui semble très bien, mais je n'ai pas trouvé QTableView dedans seulement QTableWidget...

    Bonne soirée
    Chipss

  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
    On trouve les data role ici: http://doc.qt.io/qt-5/qt.html#ItemDataRole-enum

    Avec nullege, une recherche sur QAbstractTableModel donne assez bien de résultats.

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

Discussions similaires

  1. Jtable et multi-lignes dans les cellules
    Par tuxor dans le forum Composants
    Réponses: 2
    Dernier message: 19/11/2005, 07h32
  2. Changement de couleur dans les cellules d'un tableau
    Par allowen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/11/2005, 14h52
  3. [JTable] centrer les donnees dans les cellules
    Par cmoa59 dans le forum Composants
    Réponses: 5
    Dernier message: 20/05/2005, 11h35
  4. Builder/Interb :"Non Concordance dans les paquets de do
    Par pjtuloup dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/03/2005, 09h53
  5. Alignement dans les cellules d'un tableau
    Par philippef dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2005, 12h15

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