Я использую Python 3.5, и у меня есть простой код, который создает таблицу с несколькими встроенными в нее ящиками. Вот код:PyQt5: получить индекс виджетов ячейки и их выбранные значения
from PyQt5 import QtCore
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
########################## Create table ##############################
tableWidget = QtWidgets.QTableWidget()
tableWidget.setGeometry(QtCore.QRect(200, 200, 250, 300))
tableWidget.setColumnCount(2)
tableWidget.setRowCount(9)
tableWidget.show()
################# Create tablecontent & comboboxes ###################
names = ['Name 1', 'Name 2', 'Name 3', 'Name 4']
i = 0
for j in names:
tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
comboBox = QtWidgets.QComboBox()
combo_option_list = ["Choose...", "Option 1", "Option 2", "Option 3", "Option 4"]
for t in combo_option_list:
comboBox.addItem(t)
tableWidget.setCellWidget(i, 1, comboBox)
i += 1
sys.exit(app.exec_())
Я хочу работать с этими списками, но у меня есть несколько проблем. Это уже начинается с того, что я могу использовать только последний созданный комбо-бокс с помощью следующей команды:
comboBox.activated[str].connect(do_something)
мне нужно знать следующие вещи:
- Как подключить сигналы для всех комбо-боксы?
- Как получить индекс выбранного комбинированного блока?
- Как получить индекс выбранного варианта со списком после его выбора?
Вы можете сохранить все ComboBoxes в списке, чтобы иметь доступ ко всем - 'combobox_list.append (COMBOBOX) '. Вы можете назначить собственные переменные comboBox, т.е. 'comboBox.my_index = i'. BTW: больше pythonic way 'для i, j в перечислении (имена):' – furas
@furas Спасибо! Это помогает мне немного. 'combobox_list [n_box] .currentIndexChanged.connect (do_something)' Но как получить индекс списка combobox_list после его нажатия? – saitam
В 'do_something()' вы можете получить виджет напрямую - 'widget = event.sender()', и вам не нужен его индекс. Теперь вы можете это сделать. 'widget.addItem (« Другой вариант »)', 'print (widget.my_index)' или получить выбранный параметр 'widget.currentText()' и т. д. Если вам нужен индекс, и вы не создали 'comboBox.my_index' то вы можете попробовать стандартные функции списка, такие как 'combobox_list.index (widget)' или 'if widget в combobox_list'. – furas