4

Would anyone explain what do I do wrong? I use PyQt4 on Win8. The following is my main code:

con = sqlite3.connect('storage.db')
with con:
    cur = con.cursor()
    cur.execute(script)
    rows = cur.fetchall()
    self.treeWidget.clear()
    for row in rows:
        self.treeWidget.addTopLevelItem(QTreeWidgetItem(row))

when I execute script,

script = "SELECT number,name FROM CB WHERE day > {0} AND day < {1} GROUP BY number  LIMIT {2}  ;".format(self.start_day, self.final_day,self.spinBox.value())

It work fine.

But when I execute

script = "SELECT number,name,SUM(access)/1000000.0 FROM CB WHERE day > {0} AND day < {1} GROUP BY number ,name  LIMIT {2} ;".format(self.start_day, self.final_day, self.spinBox.value())

It shows errors:

Traceback (most recent call last):
  File "G:/CBAnalysis/CB_analysis.py", line 155, in quickaccess
    self.treeWidget.addTopLevelItem(QTreeWidgetItem(row))
TypeError: arguments did not match any overloaded call:
  QTreeWidgetItem(int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QStringList, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidget, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidget, QStringList, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidget, QTreeWidgetItem, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidgetItem, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidgetItem, QStringList, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidgetItem, QTreeWidgetItem, int type=QTreeWidgetItem.Type): argument 1 has unexpected type 'tuple'
  QTreeWidgetItem(QTreeWidgetItem): argument 1 has unexpected type 'tuple'

I am sure that both query are correct for I tested them in iPython. But Why can't I execute the second query in PyQT4??


Update: Change the last line to self.treeWidget.addTopLevelItem(QTreeWidgetItem(map(unicode,row))) solve that problem! Thanks to Gary Lee.

Aaron
  • 2,383
  • 3
  • 22
  • 53
  • 3
    Isn't it obvious from the traceback? Put `print(repr(row))` in the for loop and see how the values differ between the two scripts. – ekhumoro Feb 08 '14 at 05:45
  • 2
    Thanks, it's Type error. Change last line to self.treeWidget.addTopLevelItem(QTreeWidgetItem(map(unicode,row))) works! – Aaron Feb 08 '14 at 05:49

0 Answers0