2013-07-11 2 views

답변

0
import sys 
    from PyQt4 import QtGui, QtCore 

    class mainWin(QtGui.QWidget): 
     def __init__(self, parent=None): 
      QtGui.QWidget.__init__(self, parent) 
      self.di = {"name":["raton", "kamal", "sujon"], "age":["45","21","78"]} 

      lay = QtGui.QGridLayout(self) 
      self.combo1=QtGui.QComboBox() 
      self.combo2=QtGui.QComboBox() 
      lay.addWidget(self.combo1, 0, 0) 
      lay.addWidget(self.combo2, 0, 1) 

      self.combo1.addItems(["name", "age"]) 

      self.combo2.addItems(self.di["name"]) 

      self.connect(self.combo1, QtCore.SIGNAL("currentIndexChanged (const QString&)"), 
      self.changeCombo) 



     def changeCombo(self, ind): 
      self.combo2.clear() 
      self.combo2.addItems(self.di[ind]) 





def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = mainWin() 
    win.show() 
    sys.exit(app.exec_()) 

main() 
+0

내가 언급 한 것을 잊었던 것은 버튼을 누르면 테이블의 각 행에있는 위젯이 만들어 졌다는 것입니다. – GiannisIordanou

0

당신이 동적으로 만들 필요가있는 경우에, "내가 얘기를 깜빡 했네요은 버튼을 누를 때 테이블의 각 행에서 위젯을 만든 것입니다"당신은 그들을 식별 할 수 있어야합니다 (적어도 첫 번째).

내가 QComboBox 클래스 다시 구현 한 - MyComboBox을, 그래서 그 중 하나가 변경 될 때 식별자 (행 번호)가 포함 신호 firstColumnComboBoxChanged 어떤 ("이름"또는 "나이") 선택을 방출합니다. 이 신호는 mainWin 클래스에서 changeSecondCombo 메서드를 활성화합니다. 여기서 두 번째 열의 comboBox가 변경됩니다.

이 코드를 실행하십시오. "행 추가"버튼을 클릭하면 몇 개의 행을 추가 할 수 있습니다. 첫 번째 열에서 comboBox를 변경하십시오.

import sys 
from PyQt4 import QtGui, QtCore 

class myComboBox(QtGui.QComboBox): 
    def __init__(self, comboID, mainForm): 
     super(myComboBox, self).__init__() 
     self.__comboID = comboID 
     self.__mainForm = mainForm 

     self.connect(self, QtCore.SIGNAL("currentIndexChanged (const QString&)"), self.indexChanged) 

    def indexChanged(self, ind): 
     # send signal to MainForm class, self.__comboID is actually row number, ind is what is selected 
     self.__mainForm.emit(QtCore.SIGNAL("firstColumnComboBoxChanged(PyQt_PyObject,PyQt_PyObject)"), self.__comboID, ind) 

class mainWin(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.di = {"name":["raton", "kamal", "sujon"], "age":["45","21","78"]} 

     lay = QtGui.QGridLayout(self) 
     #create tableWidget and pushButton 
     self.tableWidget = QtGui.QTableWidget() 
     self.tableWidget.setColumnCount(2) 
     self.pushButton = QtGui.QPushButton() 
     self.pushButton.setText("Add row") 
     lay.addWidget(self.tableWidget, 0, 0) 
     lay.addWidget(self.pushButton, 1, 0) 

     self.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.addRow) 

     # Custom signal 
     self.connect(self, QtCore.SIGNAL("firstColumnComboBoxChanged(PyQt_PyObject, PyQt_PyObject)"),   self.changeSecondCombo) 

    def addRow(self): 
     rowNumber = self.tableWidget.rowCount() 
     self.tableWidget.insertRow(rowNumber) 

     combo1=myComboBox(rowNumber, self) 
     combo2=QtGui.QComboBox() 
     combo1.addItems(["name", "age"]) 
     combo2.addItems(self.di["name"]) 

     self.tableWidget.setCellWidget(rowNumber, 0, combo1) 
     self.tableWidget.setCellWidget(rowNumber, 1, combo2) 


    def changeSecondCombo(self, row, ind): 
     combo2 = self.tableWidget.cellWidget(row, 1) 
     if combo2: 
      combo2.clear() 
      combo2.addItems(self.di["%s"%(ind)]) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = mainWin() 
    form.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 
+0

코드에 대한 자세한 내용이 필요하면 문제가 해결 될 경우 대답을 수락하십시오. 언제든지 물어보십시오. – Aleksandar

관련 문제