Comments 4
UFO just landed and posted this here
Раз пошла такая пьянка, может расскажите, как из QtableWidget отловить, какую ячейку отредактировал человек (на самом деле это мы уже поняли) и что ввел в нее и главное сигнал, о том что она была выбрана и что окончили ввод текста/редактирования ячейки.
0
Интересный вопрос. В C++ я чаще работаю с QTableView, поэтому вводимое значение ловлю на setData модели. В одном месте у меня есть QTableWidget, но там используется свой делегат, т.к. данные сложные и редактор неоднозначный. В принципе, можно у дефолтного делегата взять сигнал commitData. А можно у QTableWidget переопределить виртуальные слоты edit и commitData — в первом запоминать редактируемую позицию, а во втором получать значение поля.
Пример:
Пример:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Table(QTableWidget):
def __init__(self, rows, columns, parent = None):
super().__init__(rows, columns, parent)
self.editIndex = QModelIndex()
def edit(self, index, trigger, event):
self.editIndex = index
return super().edit(index, trigger, event)
def commitData(self, editor):
print("Commit r: %s, c: %s" % (self.editIndex.row(), self.editIndex.column()))
print("Old value:", self.editIndex.data())
super().commitData(editor)
print("New value:", self.editIndex.data())
app = QApplication(sys.argv)
w = Table(12, 2)
for r in range(0,12):
i = QTableWidgetItem(str(r))
w.setItem(r, 0, i)
i = QTableWidgetItem("Item %s" % str(r))
w.setItem(r, 1, i)
w.show()
sys.exit(app.exec_())
0
Sign up to leave a comment.
Лепим тулбар на PyQt, экспортируем данные в Excel и HTML