setItemSelected в QListWidget на PyQt4 - PullRequest
       5

setItemSelected в QListWidget на PyQt4

0 голосов
/ 12 октября 2011

У меня есть этот базовый код, я пытаюсь сделать так, чтобы некоторые элементы (даже для этого примера) были предварительно выбраны в QListWidget. Куда я иду не так?

from PyQt4 import QtGui, QtCore, Qt

import sys

class Main(QtGui.QWidget):
    def __init__(self, parent=None):    
        QtGui.QWidget.__init__(self,parent)

        grid = QtGui.QGridLayout()

        self.builtinpatternslist = QtGui.QListWidget()
        self.builtinpatternslist.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
        for i in range(5):
            self.builtinpatternslist.addItem(QtGui.QListWidgetItem(str(i)))
            if i % 2 == 0:
                self.builtinpatternslist.setItemSelected(QtGui.QListWidgetItem(str(i)),True)


        grid.addWidget(self.builtinpatternslist,0,0)

        self.setLayout(grid)


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    gui = Main()
    gui.show()
    gui.raise_()
    sys.exit(app.exec_())

1 Ответ

1 голос
/ 12 октября 2011

Каждый QtGui.QListWidgetItem(...) вызов создает новый элемент.В этом коде вы сначала создаете элемент, добавляете его в список ... А затем, если он находится в нечетной позиции, создаете совершенно новый элемент и выбираете его, даже не добавляя его в список.

Вам нужно убедиться, что вы имеете дело только с одним элементом каждый раз: сохраните результат одного вызова QtGui.QListWidgetItem(...) в переменной, а затем оперируйте им:

    for i in range(5):
        item = QtGui.QListWidgetItem(str(i))
        self.builtinpatternslist.addItem(item)
        if i % 2 == 0:
            self.builtinpatternslist.setItemSelected(item, True)
...