7 votes

Obtenir les données d'une cellule sélectionnée dans un tablewidget

Je suis en train de créer un programme de contrôle des stocks et j'ai rencontré un problème pour obtenir la valeur d'une cellule sélectionnée, je sais que j'ai besoin d'utiliser "QtGui.QTableWidget.currentRow" et "QtGui.QTableWidget.currentColumn" pour obtenir la position de l'élément. Cependant, je n'arrive pas à le faire fonctionner car lorsque les fonctions sont appelées, rien n'a été sélectionné et donc elle renvoie -1,-1

Est-ce que quelqu'un sait comment faire pour exécuter "QtGui.QTableWidget.currentRow" et "QtGui.QTableWidget.currentColumn" à chaque fois que l'utilisateur sélectionne une cellule ?

Je pense que le code dont j'ai besoin pour obtenir les données réelles une fois que j'ai les coordonnées est QtGui.QTableWidget.item ?

Voici le code que j'utilise pour obtenir la ligne et la colonne :

row = self.table.currentRow
column = self.table.currentColumn
self.ID = self.table.item(row, column)

Quand l'utilisateur clique sur un bouton pour ajouter du stock, le programme devrait alors utiliser le code produit qu'il vient d'obtenir pour effectuer le changement dans la base de données après avoir obtenu la quantité ajoutée par l'utilisateur

Je suis en train d'utiliser python 3.2 et pyqt 4

Toute aide serait appréciée

Merci

Sam

24voto

danodonovan Points 5268

Lorsque le QTableWidget voit que quelqu'un a cliqué sur l'une de ses cellules, il émettra un événement cellClicked - auquel vous devez vous connecter. Peut-être quelque chose comme

self.table.cellClicked.connect(self.cell_was_clicked)

Pourrait être dans votre code de configuration, et la fonction cell_was_clicked pourrait ressembler à quelque chose comme

def cell_was_clicked(self, row, column):
    print("La ligne %d et la colonne %d ont été cliquées" % (row, column))
    item = self.table.itemAt(row, column)
    self.ID = item.text()

Je n'ai pas utilisé currentRow et currentColumn car vous voulez une réponse au clic. Cette fonction est documentée ici (désolé, je préfère pyside - c'est pratiquement la même chose que PyQT). Notez également itemAt plutôt que simplement item - car vous obtiendrez l'élément de la cellule, pas son contenu. Utilisez la fonction .text() de QTableWidgetItem pour accéder au contenu.

Notez - ceci utilise les 'slots et signaux' et en particulier le 'nouveau style'. Comme vous utilisez PyQT4 et Python 3, vous ne devriez avoir aucun problème avec 'des trucs nouveaux' :-)

Vous pourriez envisager de parcourir un tutoriel sur les slots et signaux ici - cela pourrait clarifier quelques-uns de ces concepts abstraits. Bonne chance!

1voto

Amgad Elsaiegh Points 23

Voici le code qui a fonctionné pour moi:

def obtenir_valeur_cellule_selectionnée():
    ligne_actuelle = self.sold_items_details_table.currentRow()
    colonne_actuelle = self.sold_items_details_table.currentColumn()
    valeur_cellule = table.item(ligne_actuelle, colonne_actuelle).text()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X