2013-04-29 56 views
2

我有一张桌子,有4列。 这4列中的两个是关于功能。一个是特征,另一个是子特征。每列中有 ,所有单元格都有组合框。 我可以在这些单元格中打开txt。 我想:当我选择电影作为功能时,我只想看到子功能组合框中的电影名称,并且没有我在“数据”中拥有的每个子功能...当我选择功能中的食物时,我想看只有类型的食物在我subfeature组合框...Pyqt - 如何更改组合框数据,因为另一个组合框数据?

..我不知道该怎么做...有一种方法可以做到这一点?

在这里有我的高清摆在桌子组合框,打开文本文件到这些组合框:

def createEd(self, parent, option, index): 
    if index.column() == POLARITY: 
     combobox = QComboBox(parent) 
     combobox.addItems(sorted(index.model().TPolarities)) 
     combobox.setEditable(True) 
     arquivo = codecs.open("ln2.txt",encoding='utf-8',mode="r") 
     conTWordsdo = arquivo.readlines() 
     lista =[]   
     for i in conTWordsdo: 
      lista.append(i.replace("\n","")) 
     combobox.addItems(sorted(lista)) 
     return combobox    
    elif index.column() == FEATURE: 
     combobox = QComboBox(parent) 
     combobox.addItems(sorted(index.model().TFeatures)) 
     combobox.setEditable(True) 
     arquivo = codecs.open("ln1.txt",encoding='utf-8',mode="r") 
     conTWordsdo = arquivo.readlines() 
     lista = []    
     for i in conTWordsdo: 
      lista.append(i.replace("\n","")) 
     combobox.addItems(sorted(lista)) 
     return combobox 

    elif index.column() == SUBFEATURE: 
     combobox = QComboBox(parent) 
     combobox.addItems(sorted(index.model().TSubFeatures)) 
     combobox.setEditable(True) 
     arquivo = codecs.open("ln3.txt",encoding='utf-8',mode="r") 
     conTWordsdo = arquivo.readlines() 
     lista = []    
     for i in conTWordsdo: 
      lista.append(i.replace("\n","")) 
     combobox.addItems(sorted(lista)) 
     return combobox    

    elif index.column() == SENTENCE: 
     editor = QLineEdit(parent) 
     self.connect(editor, SIGNAL("returnPressed()"), self.commitAndCloseEditor) 
     return editor 
    else: 
     return QItemDelegate.createEditor(self, parent, option, index) 

回答

1

您将要使用的currentIndexChanged信号,这样的事情:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtGui, QtCore 

class MyWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.items = dict(zip(
      [ "Parent {0}".format(x) 
       for x in range(3) 
       ], 
      [ 
       [ "Child {0} - {1}".format(x, y) 
        for y in range(3) 
        ] 
       for x in range(3) 
       ] 
     )) 

     self.comboBoxChild = QtGui.QComboBox(self) 

     self.comboBoxParent = QtGui.QComboBox(self) 
     self.comboBoxParent.addItems(self.items.keys()) 
     self.comboBoxParent.currentIndexChanged[str].connect(self.on_comboBoxParent_currentIndexChanged) 
     self.comboBoxParent.setCurrentIndex(1) 

     self.layoutVertical = QtGui.QVBoxLayout(self) 
     self.layoutVertical.addWidget(self.comboBoxParent) 
     self.layoutVertical.addWidget(self.comboBoxChild) 

    @QtCore.pyqtSlot(str) 
    def on_comboBoxParent_currentIndexChanged(self, index): 
     items = self.items[str(index)] 

     self.comboBoxChild.clear() 
     self.comboBoxChild.addItems(items) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.show() 
    main.resize(222, 111) 

    sys.exit(app.exec_()) 
相关问题