Как отслеживать изменения в ячейке PyQt5?
Здраствуйте.
Искал, как можна отслеживать смену содержимого в ячейке, что бы потом брать значение из них и использовать в других операциях. Но мои поиски не увенчались успехом.
Таблица создается циклом:
def addItemName():
try:
for i in range(len(get_tovaru()['names'])):
rowPosition = ui.table_product.rowCount()
ui.table_product.insertRow(rowPosition)
ui.table_product.setItem(i, 0, QTableWidgetItem(get_tovaru()['names'][i]))
print((get_tovaru()['names']))
except Exception as e:
logging.exception(e)
def addItemPhoto():
try:
for i in range(len(get_tovaru()['names'])):
rowPosition = ui.table_product.rowCount()
ui.table_product.insertRow(rowPosition)
#getImage().downloadimage()
pic = QPixmap(f'photos/img_{i}.jpg')
label = QtWidgets.QLabel()
label.setAlignment(QtCore.Qt.AlignCenter)
label.setPixmap(pic)
label.setGeometry(0,0, 500, 500)
ui.table_product.setCellWidget(i, 1, label)
print((get_tovaru()['photo']))
except Exception as e:
logging.exception(e)
print(get_tovaru()['photo'][0])
def addItemCharesteristic():
try:
for i in range(len(get_tovaru()['names'])):
rowPosition = ui.table_product.rowCount()
ui.table_product.insertRow(rowPosition)
ui.table_product.setItem(i, 2, QTableWidgetItem(get_tovaru()['charesteristic'][i]))
print((get_tovaru()['charesteristic']))
except Exception as e:
logging.exception(e)
def addPriceGrn():
try:
for i in range(len(get_tovaru()['names'])):
rowPosition = ui.table_product.rowCount()
ui.table_product.insertRow(rowPosition)
ui.table_product.setItem(i, 3, QTableWidgetItem(get_tovaru()['price_grn'][i]))
print((get_tovaru()['price_ryb']))
except Exception as e:
logging.exception(e)
def addPriceDol():
try:
for i in range(len(get_tovaru()['names'])):
rowPosition = ui.table_product.rowCount()
ui.table_product.insertRow(rowPosition)
ui.table_product.setItem(i, 4, QTableWidgetItem(get_tovaru()['price_dol'][i]))
print((get_tovaru()['price_dol']))
except Exception as e:
logging.exception(e)
Ответы (1 шт):
Для отслеживания изменения данных в таблице, необходимо использовать QTableView + QAbstructItemModel. Вместо QAbstructItemModel можно использовать любой удобный класс модели, например QStandardItemModel, QAbstractTableModel. Для отслеживания изменений, нужно переопределить метод
bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
у модели или подписаться на сигнал
void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>())
у модели. Сигнатура метода setData и сигнала dataChanged в QT C++ полностью соответствует PyQT.
Ссылка на документацию QT: https://doc.qt.io/qt-5/qabstractitemmodel.html