2016-11-22 1 views
0

que je reçois de QTextEdit certains « code », je veux dire quelque chose comme:PyQt: faire un Dict de TextEdit, ou transformer un PyQt4.QtCore.QStringList en commun Dict

1, A, B, D, 1 
1, B, B, D, 2 
2, A, C, G, 1 

et je voudrais obtenir un dictionnaire comme:

table={'1':{'A':['B', 'D', '1'], 'B':[B, D, 2]}, '2':{A:['C', 'G', '1']}

et y accéder: Var=table[1][A][B]

mais ma table est: PyQt4.QtCore.QStringList objet à 0xb50094c4

et j'obtiens l'erreur:

File "main.py", line 45, in initMachine 
    self.TM.execute_TM(self.a, c, etat1) 
    File "/home/unifesp/Qt_Applications/Ruban.py", line66, in execute_TM 
nvSymb=self.table[etatAct][symb][0] 
TypeError: string indices must be integers 

Le problème vient du format QStringList?

def initMachine(self): 
    etat1=self.etat_1.text() 
    b = self.Table.toPlainText() 
    c=self.TM.obtenir_table(b) 
    print c 

def obtenir_table(self, code): 
    code=str(code) 
    self.a=code.split("\n") 
    table={} 
    for i in range(len(self.a)): 
     b=self.a[i].split(', ') 

     etat=b[0] 
     symbole=b[1] 
     if etat=='': 
      print "ligne %i" %(i+1) + " : erreur " 
     if not table.has_key(etat): 
      table[etat] = {} 
     if not table[etat].has_key(symbole): 
      table[etat][symbole]=b[2:] 
     else: 
      print "ligne %i" %(i+1) +" : already declare" 
    self.table=self.convert_dict(table) 

def convert_dict(self, dictionary): 
    if not isinstance(dictionary, dict): 
     return dictionary 
    return dict((str(k), self.convert_dict(v)) 
     for k, v in dictionary.items()) 
def execute_TM(self, table, ruban, etat1): 
    self.Ruban.position=1 
    self.table=unicode(table) 
    etatAct=str(etat1) 
    while etatAct != 'stop': 
     symb=self.Ruban.lire_cellules() 
     print symb 
     print table 
     nvSymb=self.table[etatAct][symb][0] 
     self.Ruban.ecrire(nvSymb) 
     if table[etatAct][symb][1]=='D': 
      self.Ruban.deplacement_droite() 
     if table[etatAct][symb][1]=='G': 
      self.Ruban.deplacement_gauche() 
     else: 
      print "erreur code deplacement" 
     etatAct=table[etatAct][symb][2] 

J'ai essayé beaucoup de choses différentes, voici la dernière version de ce que j'ai essayé ....

Merci pour votre aide!

+0

post traceback complet s'il vous plaît .... –

+0

Salut, j'ai modifié mon post, est-ce mieux? Merci. – Dadep

+0

Légèrement. Pouvez-vous nous montrer le contenu de 'self.table'? –

Répondre

0

J'ai trouvé le problème est venu des paramètres que j'ai donné pour exécuter la fonction execute_TM, table n'était pas un dict.

l'entrée était erronée

Merci Jean-François!