每次for i in range(3):
次迭代都会创建一个ComboBox项和QTreeWidget项。声明了MyClass()的实例变量,并为ComboBox和TreeWidget项分配了.setData()(因此项指向同一个变量/对象)。
选择一个ComboBox或Tree的项目会打印该项目的dataObeject的ID号。
问题:如果项目的名称已知,如何搜索Combobox非常清楚。
resultIndex = comboBox.findText('Items Name')
但是如何按项目的数据搜索Combobox的项目?所以目标:我们选择Tree的项目,我们读取所选项目的.data()。知道其中一个comoBoxe的项目具有相同的数据对象,我们在Combobox中搜索具有相应.data对象的项目:(comboItem.data()== treeItem.data)。
如何在不使用for i in range(self.comboBox.count()): and etc
from PyQt4 import QtGui, QtCore
import sys, os
class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
class myWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(myWindow, self).__init__(parent)
myLayout = QtGui.QVBoxLayout(self)
self.comboBox = QtGui.QComboBox()
self.tree = QtGui.QTreeWidget()
myLayout.addWidget(self.comboBox)
myLayout.addWidget(self.tree)
for i in range(3):
myObject=MyClass()
self.comboBox.addItem('Item '+str(i), myObject)
item=QtGui.QTreeWidgetItem()
item.setText(0, 'Item '+str(i))
item.setData(0, QtCore.Qt.UserRole, myObject)
self.tree.addTopLevelItem(item)
self.comboBox.activated.connect(self.comboActivated)
self.tree.clicked.connect(self.treeItemClicked)
def comboActivated(self, itemNumber=None):
itemData=self.comboBox.itemData(itemNumber).toPyObject()
print 'Comobox Data Object ID =', id(itemData)
def treeItemClicked(self, itemIndex=None):
item=self.tree.itemFromIndex(itemIndex)
itemData=item.data(0, QtCore.Qt.UserRole).toPyObject()
print 'TreeWid Data Object ID =', id(itemData)
# HOW TO SEARCH COMBOBOX ITEMS TO FIND A CORRESPONDING DATA OBJECT?
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
app.setApplicationName('myApp')
dialog = myWindow()
dialog.show()
sys.exit(app.exec_())