Форум сайта python.su
Доброе время суток!
Помогите пожалуйста.
Пытаюсь из базы данных MySQL вывести простую табличку, но выводить ошибку:
Traceback (most recent call last):
File “C:\Users\admin\Desktop\py\table.py”, line 93, in data
return QVariant(QString(decode_r))
TypeError: string indices must be integers
Вот код:
# -*- coding: utf-8 -*- import sys from PyQt4.QtCore import * from PyQt4.QtGui import * import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='Qwe12345', db='tablo', charset='utf8') cur = conn.cursor() cur.execute("SELECT nk,floor,nomination,name FROM tablo") for roww in cur: r = roww str_r = str(r) decode_r = str_r.decode('unicode_escape') def main(): app = QApplication(sys.argv) w = MyWindow() w.show() sys.exit(app.exec_()) class MyWindow(QWidget): def __init__(self, *args): QWidget.__init__(self, *args) # create table table = self.createTable() # layout layout = QVBoxLayout() layout.addWidget(table) self.setLayout(layout) # set font font = QFont("Courier New", 16) def createTable(self): # create the view tv = QTableView() # set the table model tm = MyTableModel(self) tv.setModel(tm) # set the minimum size tv.setMinimumSize(400, 300) # hide gridnt() #tv.setShowGrid(False) # set the font font = QFont("Courier New", 8) tv.setFont(font) # hide vertical header vh = tv.verticalHeader() vh.setVisible(False) #tv.sizeHintForRow(101) # set horizontal header properties hh = tv.horizontalHeader() hh.setStretchLastSection(True) # set column width to fit contents #tv.resizeColumnsToContents() # set row height #nrows = tm.rowCount(self) #for row in xrange(nrows): #tv.setRowHeight(row, 15) return tv class MyTableModel(QAbstractTableModel): def __init__(self, parent=None, *args): QAbstractTableModel.__init__(self, parent, *args) def rowCount(self, parent): #кол-во строк return conn.affected_rows() def columnCount(self, parent): #кол-во колонок return 4 def data(self, index, role): ##тут фунция вытягивания данных if not index.isValid(): return QVariant() elif role != Qt.DisplayRole: return QVariant() ## для отладки-можно видеть обращения к функции #print QString(u"клетка ")+str(index.row())+"-"+str(index.column()) return QVariant(QString(decode_r[index.row(),index.column()])) def headerData(self, col, orientation, role): ## тут задаются заголовки if orientation == Qt.Horizontal and role == Qt.DisplayRole: return QVariant(QString(u"Колонка ")+str(col)) return QVariant() if __name__ == "__main__": main()
Офлайн
вот что показывает нам запрос из базы:
>>>
(u'111', u'1', u'Врач', u'Иванов Иван Иванович')
(u'222', u'2', u'Врач', u'Петров Иван Игорович')
код:
# -*- coding: utf-8 -*- import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='Qwe12345', db='tablo', charset='utf8') cur = conn.cursor() cur.execute("SELECT nk,floor,nomination,name FROM tablo") #nk,floor,nomination,name for roww in cur: r = roww str_r = str(r) decode_r = str_r.decode('unicode_escape') print decode_r
Офлайн
проблема тут:
for roww in cur: r = roww str_r = str(r) decode_r = str_r.decode('unicode_escape')
str_r = str(r)
Офлайн
всё разобрался
return QVariant(QString(decode_r[index.row(),index.column()]))
return QVariant(QString(decode_r[index.row()][index.column()]))
decode_r = [] for roww in cur: decode_r.append(roww)
Офлайн