2013-09-10 3 views
0

У меня есть код fololloiwng ANF моей работы запроса штраф:Addeed в QTableWidget неправильно

###initilize Objects 
    self.dbObj = DbAbsLayer() 
    self.tableObj = MaterialsTable(dict()) 

    ####making queries, one for count row, another for result row 
    query = self.dbObj.session.query(MaterialsTable) 
    rowCounter = self.dbObj.session.query(MaterialsTable) 
    for attr , val in tmpDict.items(): 
     query = query.filter(getattr(MaterialsTable,attr).like("%%%s%%" % val)).all() 
     rowCounter = rowCounter.filter(getattr(MaterialsTable,attr).like("%%%s%%" % val)).count() 
    ##### commit my queries 
    self.dbObj.session.commit() 
    ####setting up my QtableWidget 
    searchFrameObject.tableWidget.setRowCount(rowCounter) 
    searchFrameObject.tableWidget.setColumnCount(5) 
    ######inserting into QtableWidget 
    for row in range(rowCounter): 
     for result in query: 
      item = QtGui.QTableWidgetItem(_fromUtf8(result.name)) 
      item.setFlags(item.flags()^QtCore.Qt.ItemIsEnabled) 
      searchFrameObject.tableWidget.setItem(row,0,item) 

      item = QtGui.QTableWidgetItem(_fromUtf8(integerToPersian(result.bought_price))) 
      item.setFlags(item.flags()^QtCore.Qt.ItemIsEnabled) 
      searchFrameObject.tableWidget.setItem(row,1,item) 

      item = QtGui.QTableWidgetItem("date")#result.bought_date) 
      item.setFlags(item.flags()^QtCore.Qt.ItemIsEnabled) 
      searchFrameObject.tableWidget.setItem(row,2,item) 


      item = QtGui.QTableWidgetItem(_fromUtf8(integerToPersian(result.stock))) 
      item.setFlags(item.flags()^QtCore.Qt.ItemIsEnabled) 
      searchFrameObject.tableWidget.setItem(row,3,item) 
      print result.stock 
      print integerToPersian(result.stock) 
      item = QtGui.QTableWidgetItem(_fromUtf8(integerToPersian(result.minimum_bound))) 
      item.setFlags(item.flags()^QtCore.Qt.ItemIsEnabled) 
      searchFrameObject.tableWidget.setItem(row,4,item) 
      print result.minimum_bound 

В моем цикле я print result.stock и result.minimum.bound я могу видеть все, что я имею в БД может я видеть в PHPMyAdmin, Но когда i add to QTableWidget, я вижу добавленный последний результат.

Мой вопрос есть, как я могу добавить каждый результат в QTableWidget?

+0

К сожалению, я нашел http://www.marcogiordanotd.com/blog/uncategorized/looping-with-qtablewidgetitem У вас есть идеи? Или вы использовали setItem в цикле раньше? – PersianGulf

ответ

1

Это то, что вы делаете неправильно:

for row in range(rowCounter): 
    for result in query: 

Пишет все результаты query более в каждой строке предыдущего result, так что именно поэтому вы можете увидеть только последний результат.

Возможное решение (при условии, query является массив):

for row in range(rowCounter): 
    result = query[row] 
    item = .... 
    ..... 

что путь каждый результат, содержащийся в query будут записаны в один (новый) строк (5 столбцов). Вы должны проверить, если ваш rowCounter имеет такую ​​же длину, как ваш query (это должно быть, если вы хотите, чтобы показать один результат для каждой строки)

Если вы до сих пор не понимаю, что это неправильно, не стесняйтесь спросить :)

+0

'print result.stock' print 1 2 3 для каждого трех циклов, потому что для каждого файла result.stock я сохранил 1, 2 и 3 в DB, ​​убедитесь, что мой запрос верен. – PersianGulf

+0

'для результата в запросе [строка]: TypeError: объект« MaterialTable »не является итерабельным', когда я тестирую с помощью rowCounter, я получаю истинный результат. – PersianGulf

+0

Но i QtableWidget не может показать истинные данные, это парадоксально .... – PersianGulf

Смежные вопросы