2014-09-09 4 views
-1

Я поставил форму из PyQt4, я беру пример из предыдущего ответа, но я получаю индекс Tuple вне диапазона. Мой код приведен ниже.Tuple Index Out of Range (PyQt + Mysqldb)

cursor.execute("SELECT id_cliente as 'Codigo del cliente', nombre AS 'Nombre' FROM t_clientes") 
     row = cursor.fetchall() 
     if row == None: 
      QtGui.QMessageBox.warning(self, "Error", "No hay Datos .... " , QtGui.QMessageBox.Ok) 
      return 
     ver_tabla.setRowCount(len(row)) 
     ver_tabla.setColumnCount(3) 
     ##rellenamos la tabla con los datos ... 
     for i in range (len(row)): 
      for j in range (3): 
       item = QTableWidgetItem('%s' % (row[i][j + 1])) 
       ver_tabla.setItem(i, j, item) 
     layout_btn_clientes.addWidget(ver_tabla,3,0,5,3) 

File "/home/admino/Proyectos/TM/recursosh.py", line 102, in init item = QTableWidgetItem('%s' % (row[i][j + 1])) IndexError: tuple index out of range

спасибо за помощь, я буду делать заметки об этом проблемы, им мышления, его легко решить, но я не найти правильный ответ

ответ

0

Как я вижу свой SQL код, результат это должно быть 2 столбца x N строка (N - номер записи);

SELECT id_cliente as 'Codigo del cliente', nombre AS 'Nombre' FROM t_clientes 

Так, tuple записи должно быть выглядеть, как это (2 колонки х N строк);

record = (
    (u'Data column 1.1', u'Data column 1.2'), 
    (u'Data column 2.1', u'Data column 2.2'), 
    ... 
    (u'Data column M.N', u'Data column M.N'), 
) 

Затем показать все данные в записи, легкий в использовании петлей for;

for row in range (len(record)): 
    for column in range(len(record[row])): # For proof concept. I know is overhead, your can replace with 2. 
     print record[row][column] 

Так что ваш вопрос, проблема в том, Index Out of Range как говорит по ошибке питона. Чтобы исправить это, используйте правильную ссылку индекса, вычислив перед ее использованием (а не код непосредственно);

cursor.execute("SELECT id_cliente as 'Codigo del cliente', nombre AS 'Nombre' FROM t_clientes") 
listsRecord = cursor.fetchall() 
if listsRecord: 
    QtGui.QMessageBox.warning(self, "Error", "No hay Datos .... " , QtGui.QMessageBox.Ok) 
    return 

lengthRow = len(listsRecord) 
lengthColumn = len(listsRecord[0]) # column is 2 at all 
yourQTableWidget.setRowCount(lengthRow) 
yourQTableWidget.setColumnCount(lengthColumn) 
for row in range (lengthRow): 
    for column in range (lengthColumn): 
     itemQTableWidgetItem = QtGui.QTableWidgetItem(str(listsRecord[row][column])) 
     yourQTableWidget.setItem(row, column, itemQTableWidgetItem) 

Пример проверить его;

import sys 
from PyQt4 import QtGui 

myQApplication = QtGui.QApplication(sys.argv) 
yourQTableWidget = QtGui.QTableWidget() 
listsRecord = (('BRA001', 'ARCELIA EUGENIA'), ('DTA001', 'ALEJANDRA'), ('EDM001', 'ESPACIOS DE DISENO Y MUEBLES'), ('EIE001', 'EDMUNDO')) # Simulate data 
lengthRow = len(listsRecord) 
lengthColumn = len(listsRecord[0]) 
yourQTableWidget.setRowCount(len(listsRecord)) 
yourQTableWidget.setColumnCount(lengthColumn) 
for i in range (lengthRow): 
    for j in range (lengthColumn): 
     item = QtGui.QTableWidgetItem(str(listsRecord[i][j])) 
     yourQTableWidget.setItem(i, j, item) 
yourQTableWidget.show() 
sys.exit(myQApplication.exec_()) 

Экспериментальный результат: Windows 7, Python 2.7 x86, PyQt4

enter image description here

+0

спасибо за ответ, но только "печать" в последней колонке (и запись) ... –

+0

Huumm ???? покажите результат 'cursor.fetchall()' (Отпечаток на cinsole) перед добавлением в таблицу. Благодарю. –

+0

(('BRA001', 'ARCELIA EUGENIA'), ('DTA001', 'ALEJANDRA'), ('EDM001', 'ESPACIOS DE DISENO Y MUEBLES'), ('EIE001', 'EDMUNDO') ... –