PyQT:如何按数据搜索窗口小部件项目

时间:2014-04-17 21:16:12

标签: python pyqt

每次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

的情况下执行此操作

enter image description here

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

0 个答案:

没有答案