2012-03-08 51 views
0

我正在使用python插件。我有一个QListWidget作为fieldsList _2在我的form.I列出一些项目作为查询result.My代码如下:Python -QListWidget.TypeError:range()整数结束参数预计

c = self.db.con.cursor() 
self.db._exec_sql(c, "SELECT desc,survey from bio") 
      for row in c.fetchall(): 
        acoustic=unicode(row[0]) 
        if (acoustic[0:3]=="ACO"): 

          surv=unicode(row[1]) 
          self.fieldsList_2.addItem(unicode(row[1])) 

          for i in range(self.fieldsList_2.count): 
            if self.fieldsList_2.item(i).text() == surv: 
              self.fieldsList_2.takeItem(i) 

我想防止QListWidget fieldsList _2从上市复制entries.But当我尝试运行上面的代码,它提供了错误:

for i in range(self.fieldsList_2.count): 
TypeError: range() integer end argument expected, got builtin_function_or_method. 

我试过范围(1,self.fieldsList_2.count) ..但没有成功。如果3个相同的项目存在,那么我想保留其中一个到Qlistwidget

回答

1

要解决给出的错误信息,请尝试从

for i in range(self.fieldsList_2.count): 

更改为

for i in range(self.fieldsList_2.count()-1): 

计数() - 因为您刚刚添加的元素被添加到列表的末尾1,和如果你想保留一个,你应该忽略最后一个。

另一种方法是,如果不存在重复,这里是一些伪代码,只添加一个项目:

duplicates = self.fieldlist_2.findItems(surv, QtCore.Qt.MatchExactly) 
if duplicates.size() == 0: 
    self.fieldsList_2.addItem(unicode(row[1])) 
//skip the loop part since it's not necessary using this alternative 
+0

@的Kristofer - yes..but两个相同的项目removed..i想继续其中之一... – poonam 2012-03-08 07:47:50

+0

@poonam:在答案中添加了处理该问题的零件。 – Kristofer 2012-03-08 08:18:14

+0

@ Kristofer-ok,但在Qt :: MatchExactly中出现语法错误...并且count() - 1不会将单个项添加到列表中... – poonam 2012-03-08 09:51:11