Pull to refresh

Comments 4

UFO just landed and posted this here
Раз пошла такая пьянка, может расскажите, как из QtableWidget отловить, какую ячейку отредактировал человек (на самом деле это мы уже поняли) и что ввел в нее и главное сигнал, о том что она была выбрана и что окончили ввод текста/редактирования ячейки.
Интересный вопрос. В 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_())
спасибо, то что надо. Давно искал хороший пример.
Sign up to leave a comment.

Articles