PyQt : 从 Text Edit 生成一个 Dict,或者在普通 Dict 中转换一个 PyQt4.QtCore.QStringList
PyQt : make a Dict from Text Edit, or transform a PyQt4.QtCore.QStringList in common Dict
我从 QtextEdit 得到一些 "code",我的意思是:
1, A, B, D, 1
1, B, B, D, 2
2, A, C, G, 1
我想要一本像这样的字典:
table={'1':{'A':['B', 'D', '1'], 'B':[B, D, 2]}, '2':{A:['C', 'G', '1']}
然后访问它:Var=table[1][A][B]
但是我的 table 是:PyQt4.QtCore.QStringList
object at 0xb50094c4
然后出现错误:
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
问题来自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]
我尝试过很多不同的东西,这里是我尝试过的最后一个版本....
感谢您的帮助!
我发现问题出在我为执行函数 execute_TM
提供的参数,table
不是 dict
。
输入错误
谢谢让-弗朗索瓦!
我从 QtextEdit 得到一些 "code",我的意思是:
1, A, B, D, 1
1, B, B, D, 2
2, A, C, G, 1
我想要一本像这样的字典:
table={'1':{'A':['B', 'D', '1'], 'B':[B, D, 2]}, '2':{A:['C', 'G', '1']}
然后访问它:Var=table[1][A][B]
但是我的 table 是:PyQt4.QtCore.QStringList
object at 0xb50094c4
然后出现错误:
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
问题来自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]
我尝试过很多不同的东西,这里是我尝试过的最后一个版本....
感谢您的帮助!
我发现问题出在我为执行函数 execute_TM
提供的参数,table
不是 dict
。
输入错误
谢谢让-弗朗索瓦!