Рекомендуемый подход для проверки ячейки на динамической таблице.
Сценарий: у меня есть QDialog, где на основе разных выпадающих списков динамически добавляются 1 или более таблиц. Поскольку таблицы добавляются динамически, стандартного сигнала щелчка ячейки недостаточно. Он содержит только строку и столбец, и мне нужно знать, какая таблица была нажата в дополнение к строке и столбцу. Более конкретно, у меня есть 2 столбца с целочисленными значениями. Когда ячейка изменяется в одном из столбцов, они должны находиться в допустимом диапазоне, и значение ячейки во 2-м столбце должно быть> = значение ячейки в первом столбце.
Я довольно новичок в Python, но я думаю, что мне нужно создать класс, который расширяет QTableWidgetItem дополнительной информацией, которая мне нужна, и отправляет пользовательский сигнал, который я затем могу подключить к слоту в диалоге , Я пробовал несколько вариантов следующего кода, но не могу сделать все правильно:
class SmartCell(QtCore.QObject):
valueChanged = QtCore.pyqtSignal(str) # Signal to be emitted when value changes.
def __init__(self, tbl, rowname, colname, value):
QtGui.QTableWidgetItem.__init__(self)
self.tbl_name = tbl
self.row_name = rowname
self.col_name = colname
# self.setText(value)
self.__value = value
@property
def value(self):
return self.__value
@value.setter
def value(self, value):
if self.__value != value:
self.__value = value
# self.setText(value)
signal = self.tbl_name + ":" + self.row_name + ":" + self.col_name + ":" + self.text()
self.valueChanged.emit(signal)
и затем в диалоговом окне после импорта ссылки SmartCell как sCell:
item = sCell(obj_name, f.part_name, "start_frame", str(f.start_frame))
item.valueChanged.connect(self.frame_cell_changed)
tbl.setItem(rowcounter, 1, item)
item = sCell(obj_name, f.part_name, "end_frame", str(f.end_frame))
item.valueChanged.connect(self.frame_cell_changed)
tbl.setItem(rowcounter, 2, item)