2012-09-16 5 views
0

L'utilisateur définit manuellement les valeurs dans toutes les cellules d'un QTableWidget. Les valeurs de la première ligne du tableau représentent les valeurs que nous voulons stocker dans un dictionnaire FirstRowDict. Les valeurs de la deuxième ligne seront mises en SecondRowDict et ainsi de suite.Remplir un dictionnaire avec toutes les valeurs de cellule de la ligne donnée

enter image description here

donc d'une table comme celle montrée dans l'image, nous voulons finir dans cet exemple avec FirstRowDict={0:10,1:20} et SecondRowDict={0:30,1:40}

Pour cela j'ai créé un bouton et ajouté une action met à jour les dictionnaires cibles lorsque vous cliquez dessus:

def button_click(): 
    for j in range(0,2): 
     FirstRowDict.update({i: float(str(tablewidget.itemAt(0,j).text()))}) 

     #I put "0" in itemAt because first row is zero 
     #tablewidget = QTableWidget() declared earlier in the source code 

     SecondRowDict.update({i: float(str(tablewidget.itemAt(1,j).text()))}) 

    print '1st_Row_Dict=%s'%1st_Row_Dict,'\n2nd_Row_Dict=%s'%2nd_Row_Dict 

La sortie n'est pas correct car les dictionnaires sont remplis avec la même valeur et non la valeur unique de chaque cellule. Je reçois FirstRowDict={0:10,1:10} et SecondRowDict={0:10,1:10}

Il semble que je dois créer un nouvel élément en utilisant QTableWidgetItemhttp://doc.qt.nokia.com/4.7-snapshot/qtablewidget.html#item

Python begginer, quelques conseils seraient appréciés.

+0

Qu'obtenez-vous en sortie? BTW, '1st_Row_Dict' n'est pas un nom valide en Python. – Avaris

+0

C'est ce que je reçois: FirstRowDict = {0: 10,1: 10}, SecondRowDict = {0: 10,1: 10} .J'ai édité les noms de dictionnaire parce que je viens de choisir ces noms pour l'exemple – CosmoSurreal

Répondre

1

Ah, je vois la confusion. itemAt renvoie l'élément à la position donnée, mais ce n'est pas row/column. C'est la coordonnée (pensez-y en tant que pixel). Oui, vous devez utiliser item au lieu de itemAt. Vous n'avez pas besoin de str si vous voulez le convertir en flottant. float() fonctionnera sur un QString comme s'il s'agissait d'un str. Et, au lieu de .update, vous pouvez simplement affecter la nouvelle valeur à la clé.

FirstRowDict[i] = float(tablewidget.item(0, j).text()) 
+0

Fonctionne parfaitement! toi ! – CosmoSurreal

Questions connexes