简体   繁体   English

setItemSelected在PyQt4上的QListWidget中

[英]setItemSelected in QListWidget on PyQt4

I have this barebones code, I am trying to make it so some items (all even for this example) are preselected inside the QListWidget. 我有这个准系统代码,我正在尝试使其成为QListWidget内的某些项(即使对于本示例来说都是如此)。 Where am I going wrong? 我要去哪里错了?

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_())

Each QtGui.QListWidgetItem(...) call creates a new item. 每个QtGui.QListWidgetItem(...)调用都会创建一个新项目。 What you are doing in that code is first creating an item, adding it to the list... And then, if it's in an odd position, creating a whole new item and selecting it without ever adding it to the list. 您在该代码中所做的工作是首先创建一个项目,然后将其添加到列表中...然后,如果它处于一个奇怪的位置,请创建一个全新的项目并选择它,而无需将其添加到列表中。

You need to make sure that you're only dealing with one item each time: save the result of a single QtGui.QListWidgetItem(...) call in a variable, and then operate on it: 您需要确保每次只处理一项:将单个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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM