Partage
  • Partager sur Facebook
  • Partager sur Twitter

PyQt4 Tableau ajouter ligner avec remplissage auto

Sujet résolu
    20 février 2013 à 8:56:28

    Bonjour,

    Voici mon problème : j'ai créé une fenêtre avec un tableau en utilisant PyQt4. Par défaut, j'ai une ligne préremplie (surtout pour m'aider à repérer le formalisme).

    Sur ma fenêtre, j'ai un bouton qui me permet d'ajouter une ligne. La ligne se crée bien quand j'appuie dessus. Par contre, si je souhaite la créer et remplir des valeurs dedans, ça ne fonctionne plus. Voici comment j'ai créé ma fonction (qui se lance quand on appuie sur le boutton) :

        def add_line(self):
            add_line_i=self.tableWidget.rowCount()+1
            self.tableWidget.setRowCount(add_line_i)
            item = self.tableWidget.item(add_line_i, 0)
            item.setText(_translate("MainWindow", "0", None))

    L'erreur qui est retournée est la suivante :

        item.setText(_translate("MainWindow", "0", None))
    AttributeError: 'NoneType' object has no attribute 'setText'

    Ce que je trouve étrange, c'est que si j'impose de travailler sur la première ligne (celle qui est créé ds PyQt pour avoir des cases pré remplies, ça marche. Par contre pas sur les lignes crées :s

    Une petite idée à partager ?



    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2013 à 9:51:53

      Les numéro de ligne vont de 0 à rowCount() -1. Du coup, la dernière ligne de ton tableau ne se trouve pas à add_line_i mais à add_line_i - 1.

      • Partager sur Facebook
      • Partager sur Twitter
        20 février 2013 à 14:01:50

        Merci pour la réponse, je l'avais déjà intégré, pardon. En fait, le problème venait de la déclaration même du tableau. Il faut commencer par définir la forme, mais aussi les cases... Voici la fonction corrigée :

            def add_line(self):
                add_line_i=self.tableWidget.rowCount()+1
                self.tableWidget.setRowCount(add_line_i)
                
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setVerticalHeaderItem(add_line_i-1, item)
                
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setItem(add_line_i-1, 0, item)
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setItem(add_line_i-1, 1, item)
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setItem(add_line_i-1, 2, item)
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setItem(add_line_i-1, 3, item)
                item = QtGui.QTableWidgetItem()
                self.tableWidget.setItem(add_line_i-1, 4, item)
                item = QtGui.QTableWidgetItem()
                
                item = self.tableWidget.item(add_line_i-1, 0)
                item.setText(_translate("MainWindow", "1", None))
                item = self.tableWidget.item(add_line_i-1, 1)
                item.setText(_translate("MainWindow", "1", None))
                item = self.tableWidget.item(add_line_i-1, 2)
                item.setText(_translate("MainWindow", "1", None))
                item = self.tableWidget.item(add_line_i-1, 3)
                item.setText(_translate("MainWindow", "1", None))



        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2013 à 14:42:12

          Tu n'es pas obligé de créer toi-même tes items :
          Tu peux simplement définir les valeurs de ton modèle et la vue fera le reste.

          app = QApplication(sys.argv)
          
          tableWidget = QtGui.QTableWidget(0,4)
          last  = tableWidget.rowCount()
          tableWidget.insertRow( last )
          
          model = tableWidget.model()
          model.setData( model.index( last, 0 ), "col 1" )
          model.setData( model.index( last, 1 ), "col 2" )
          model.setData( model.index( last, 2 ), "col 3" )
          model.setData( model.index( last, 3 ), "col 4" )
          
          tableWidget.show()
          
          sys.exit(app.exec_())
          • Partager sur Facebook
          • Partager sur Twitter
            1 mars 2013 à 15:46:41

            Super !! Effectivement je ne connaissais pas cette approche. Je vais regarder ça !
            • Partager sur Facebook
            • Partager sur Twitter

            PyQt4 Tableau ajouter ligner avec remplissage auto

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown