2012-02-27 3 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

필자는 당신이 제안하지만 같은 문제가 계속 무슨 일이 일어나고 있는지 시도, 당신은 가능성의 딕셔너리를 반환하는 방법을 나에게 설명 할 수 목록을 쓰는 것이 아니라 명령을 쓰는 것? – BradBeighton

+1

당신은'self.loadstudentArrayOfRecords()'함수의 코드와 전체 예외 추적 (내가 제안한 변경을 한 후에)을 보여줘야한다. 또한 디버깅 기술이 부족한 것처럼 보이므로 사람들이 어떻게하는지주의하십시오. 코드를 여러 줄로 나누면 디버깅에 도움이됩니다. 코드가 정확히 어느 줄에 있는지 찾아냅니다. 또한 변수를 사용하는 행의 앞/뒤에 변수를 인쇄 해보십시오. – warvariuc

+0

@ user1236314 - 한 번에 한 줄로 많은 일을했기 때문에 오류가 어디에 있는지 알 수 없습니다. warwaruk이 제안한 것을하면 이제는 오류가있는 행을 알려주는 추적 표시가 나타나며 그 문제가 무엇인지 쉽게 알 수 있습니다. traceAs가'studentsArray'가 문제라고 말하면,'loadstudentArrayOfRecords()'의 결과는리스트이고 int 인덱스로 액세스해야합니다. '학생'줄이 오류라고 말하면 실제 목록입니다. 기본적으로 데이터 유형을 어딘가에 혼동하고 있습니다. – jdi