私はコンボボックスとラインエディットでいっぱいのテーブルウィジェットを持っており、コンボボックスで選択された選択肢をテーブルウィジェットの別のコンボボックスで利用可能な選択肢に影響を与える方法を見つけたいと思っています。何かアイデアはありますか?
質問する
600 次
2 に答える
0
「私が言及するのを忘れていたのは、ボタンが押されたときにテーブルの各行のウィジェットが作成されるということです」、その場合、それらを動的に作成する必要があり、それらを識別できる必要があります (少なくとも最初のもの)。 .
QComboBox
クラス -を再実装したので、それらのいずれかが変更されると、識別子 (行番号) と選択されたもの (「名前」または「年齢」) を含むMyComboBox
シグナルが送信されます。そのシグナルは、2 列目のコンボボックスが変更されたクラスのメソッドfirstColumnComboBoxChanged
をアクティブにします。changeSecondCombo
mainWin
このコードを実行します。「行を追加」ボタンをクリックして行を追加します。最初の列のコンボボックスを変更してみてください。
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()
于 2013-09-09T08:11:38.050 に答える