Python -QListWidget.TypeError: ожидаемый аргумент целочисленного конца диапазона () - PullRequest
0 голосов
/ 08 марта 2012

Я работаю с плагинами Python. У меня есть один QListWidget как fieldsList _2 в моей форме. Я перечисляю некоторый элемент в качестве результата запроса. Мой код выглядит следующим образом:

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 перечислять дубликаты записей. Но когда я пытаюсь запустить приведенный выше код, выдает ошибку:

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

Я пытался range (1, self.fieldsList_2.count) .. но безуспешно. Если существует 3 одинаковых элемента, я хотел бы сохранить один из них в Qlistwidget .

1 Ответ

1 голос
/ 08 марта 2012

Чтобы исправить данное сообщение об ошибке, попробуйте изменить значение с

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

на

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

count () - 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
...