在PyQt4中QListWidget使用setItemSelected

0 投票
1 回答
3746 浏览
提问于 2025-04-17 04:07

我有一段简单的代码,我想让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

每次调用 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)

撰写回答