У меня есть tablewidget, полный comboBoxes и lineEdits, и я хочу найти способ получить выбор, выбранный в comboBox, повлиять на доступные варианты в другом comboBox в tableWidget.Any идеи?Как подключить два виджета в tableWidget в PyQT?
ответ
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()
«То, что я забыл упомянуть о том, что виджеты в каждой строке таблицы создаются, когда нажата кнопка», в этом случае вам нужно создать их динамически, и вы должны быть в состоянии идентифицировать их (по крайней мере, первый).
Я повторно реализован QComboBox
класс - MyComboBox
, поэтому, когда любой из них изменяется он будет излучать сигнал firstColumnComboBoxChanged
, который содержит идентификатор (номер строки) и что выбран («имя» или «возраст»). Этот сигнал активирует метод changeSecondCombo
в классе mainWin
, где изменяется 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()
Пожалуйста, примите ответ, если он решает вашу проблему, также, если вам нужна дополнительная информация о коде, не стесняйтесь спрашивать. – Aleksandar
- 1. Как получить строку виджета в tablewidget в PyQt?
- 2. PyQt: TableWidget отменить выбор?
- 3. Как обновить данные в PyQt TableWidget?
- 4. PyQt как очистить элементы в tablewidget
- 5. Как щелкнуть определенную строку в tablewidget, используя функцию в Pyqt?
- 6. PyQt - отображение виджета поверх виджета
- 7. Python PyQt и Psycopg2 с TableWidget
- 8. Переопределение виджета QLabel в PyQT
- 9. Выравнивание виджета в ячейке pyqt
- 10. Использование пользовательского виджета в PyQt?
- 11. Как вставить данные из строкиEdit в tableWidget в PyQt4?
- 12. Pyqt как получить размеры виджета
- 13. Пользовательский размер виджета PyQt
- 14. Обновление виджета таблицы Pyqt
- 15. Руки виджета PyQt обрезаны
- 16. Как подключить два класса с помощью PyQt Signal Slot?
- 17. Как подключить pyqtSignal между классами в PyQT
- 18. Как подключить окно PyQt в Maya
- 19. Как получить изменения сразу в виде виджета textEdit в PyQt?
- 20. Установка начальной ширины виджета pyqt в разделителе
- 21. Как получить текст combobox в tablewidget?
- 22. Qt - Добавление данных в TableWidget через другой TableWidget
- 23. переустановка макета для виджета pyqt
- 24. Как отображать содержимое из базы данных MySql, выбранной из ComboBox, в groupBox/TableWidget usning PyQt
- 25. Обновление или обновление виджета PyQt
- 26. pyqt: Способ чтения стилей виджета?
- 27. PyQt/PySide - Фактический размер виджета
- 28. PyQT динамически, автоматически меняя свойства цвета табличного виджета
- 29. Как я могу предотвратить появление виджета PyQt?
- 30. PyQT КНОПКА подключить создание в цикле
Я забыл упомянуть, что виджеты в каждой строке таблицы создаются при нажатии кнопки. – GiannisIordanou