2011-10-11 132 views
0

我有这个准系统代码,我试图让它有一些项目(所有甚至是本例)在QListWidget中预选。我哪里错了?setItemSelected在QListWidget上PyQt4

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

每个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) 
+0

太感谢你了: ) – user964375