我有一個tablewidget完整的comboBoxes和lineEdits,我想找到一種方法來獲取在comboBox中選擇的選項,影響tableWidget.Any中另一個comboBox中的可用選項。如何在PyQT的tableWidget中連接兩個小部件?
0
A
回答
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
「我忘了提的是,當一個按鈕被按下表的每一行中的小部件創建」,在這種情況下,你需要動態地創建他們,你需要能夠識別它們(至少第一個)。
我已經重新實現QComboBox
類 - MyComboBox
,所以當它們中的任何改變,它將會發射信號firstColumnComboBoxChanged
包含標識符(行號),並選擇(「名」或「年齡」)是什麼。該信號將在mainWin
類中激活changeSecondCombo
方法,其中第二列中的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
相關問題
- 1. 我如何在PyQt的tablewidget中獲取小部件的行?
- 2. 連接2個小部件,PyQt
- 3. 如何刷新PyQt TableWidget中的數據?
- 4. pyqt:如何刪除一個小部件?
- 5. PyQt的,小部件
- 6. Python PyQt和Psycopg2與TableWidget
- 7. PyQt小部件在多個文件
- 8. 如何在yii bootstrap小部件中獲得兩個鏈接?
- 9. PyQt的 - 如何將多個信號連接到同一個部件
- 10. 如何在PyQt中獲得先前激活的小部件?
- 11. 如何在PyQt的textEdit小部件中立即獲取更改?
- 12. 如何使用PyQt信號插槽連接兩個類?
- 13. 上連接兩個OptionMenu部件的Tkinter
- 14. PyQt - 在小部件頂部顯示小部件
- 15. PyQt:相對部件大小
- 16. pyqt向QListWidget添加一個小部件
- 17. PyQt每個選項卡小部件
- 18. 清除一個QWebView小部件PyQt
- 19. 更新一個PyQt小部件
- 20. 如何在PyQT小部件中實現圖表
- 21. PyQt/Qt:如何在Qlabel小部件中拉伸圖像?
- 22. 如何在PyQT中檢測父窗口小部件?
- 23. 如何配置Qt Designer以在OSX中加載PyQt小部件?
- 24. pyqt - 如何從狀態欄中的小部件中刪除boder?
- 25. PyQt在2個佈局中顯示1個小部件?
- 26. 如何在C中連接兩個char *?
- 27. 在Linux中,如何連接兩個vNIC?
- 28. 如何在MySQL中連接兩個表?
- 29. PyQt如何獲取發件人(小部件)在closeEvent?
- 30. 如何在PyQt中使用pyqtSignal連接2個窗口?
我忘了提及的是表中每一行的小部件是在按下按鈕時創建的。 – GiannisIordanou