2012-02-27 15 views
2

私は基本的に配列を検索し、検索の結果を表ウィジェットに移そうとしています。他のすべてが動作しているようですが、コードを実行してすべての情報を入力すると、TypeErrorというエラーメッセージが表示され続けます。リストインデックスはstrではなく整数でなければなりません。これは私がdictsののdictを返す必要がありますPythonの表ウィジェットの問題

self.loadstudentArrayOfRecords()のように見える

if(studentRecord['Student Name'] == self.ui.SearchlineEdit.text()): 
    studentsArray = self.loadstudentArrayOfRecords() 
    self.ui.DetailstableWidget.insertRow(0) 
    self.ui.DetailstableWidget.setItem(0,0,QtGui.QTableWidgetItem(studentsArray[self.ui.SearchlineEdit.text()]['Student Name'])) 
    self.ui.DetailstableWidget.setItem(0,1,QtGui.QTableWidgetItem(studentsArray[self.ui.SearchlineEdit.text()]['Student Code'])) 
    self.ui.DetailstableWidget.setItem(0,2,QtGui.QTableWidgetItem(studentsArray[self.ui.SearchlineEdit.text()]['Instrument Name'])) 
    self.ui.DetailstableWidget.setItem(0,3,QtGui.QTableWidgetItem(studentsArray[self.ui.SearchlineEdit.text()]['Instrument Code'])) 

答えて

1

で問題を抱えているコードですが、リストの辞書を返します。

チェック機能self.loadstudentArrayOfRecords()

あなたは、コードをより読み行わ場合は、より高速なバグを見つけるだろう:

searchText = self.ui.SearchlineEdit.text() 
if studentRecord['Student Name'] == searchText: 
    studentsArray = self.loadstudentArrayOfRecords() 
    student = studentsArray[searchText] 
    tableWidget = self.ui.DetailstableWidget 
    tableWidget.insertRow(0) 
    tableWidget.setItem(0, 0, QtGui.QTableWidgetItem(student['Student Name'])) 
    tableWidget.setItem(0, 1, QtGui.QTableWidgetItem(student['Student Code'])) 
    tableWidget.setItem(0, 2, QtGui.QTableWidgetItem(student['Instrument Name'])) 
    tableWidget.setItem(0, 3, QtGui.QTableWidgetItem(student['Instrument Code'])) 
+0

IVEは示唆しているが、同じ問題はまだ何が起こっているのかを試してみました、あなたはおそらくの辞書を返す方法を私に説明できますリストのdictsではなく、dicts? – BradBeighton

+1

'self.loadstudentArrayOfRecords()'関数のコードと完全な例外トレースバック(変更を提案した後)を表示してください。また、デバッグスキルが不足しているように見えるので、どのようにこれを行うのか注意してください。コードを複数の行に分割すると、デバッグに役立ちます。つまり、どの行にコードが正確に区切られているかを知ることができます。また、変数を使用する行の前後に変数を出力してみてください。 – warvariuc

+0

@ user1236314 - 一度に1行で多くのことを行っていたため、エラーの原因を知ることが難しくなりました。 warwarukが示唆したことを行うことで、エラーのある行を示すトレースバックが得られ、その問題が何であるかを簡単に確認できるはずです。 'studentsArray'が問題であることをトレースバックが示している場合、' loadstudentArrayOfRecords() 'の結果はリストであり、intインデックスでアクセスする必要があります。 'student'行がエラーであるとすれば、それは実際のリストです。基本的には、データ型をどこかで混乱させています。 – jdi