2012-06-26 3 views
1

Я пытаюсь заставить мой QTableWidget вызывать некоторую функцию при изменении значений в ячейке.pyqt QTableWidgetItem connect signal

self.table = QtGui.QTableWidget() 
tableItem = QtGui.QTableWidgetItem(str(attr.GetValue())) 
self.table.setItem(row, 1, tableItem) 
QtCore.QObject.connect(self.table, QtCore.SIGNAL('currentItemChanged(QTableWidgetItem*, QTableWidgetItem*)'), someFunc) 

Моя проблема заключается в том, что она вызывает функцию, как только я вхожу в клетку, прежде чем я даже сделал изменения значений к нему. Также он вызывает функцию дважды по какой-то странной причине.

ответ

3

Я думаю, вы используете неправильный сигнал. currentItemChanged относится к выбору. Не для того, когда данные изменяются. Попробуйте использовать itemChanged:

self.table.itemChanged.connect(someFunc) 

Обратите также внимание, что я использую new-style signal slots, которые были введены еще в Qt 4.5. Вам больше не нужно больше беспокоиться о том, чтобы указать подпись C++.

Что касается вашего сигнала, срабатывающего несколько раз, это было либо потому, что он стрелял каждый раз, когда выбор менялся, и вы его не понимали, или вам удалось подключить его более одного раза.

Для справки, старый синтаксис для подключения этого сигнала является:

QtCore.QObject.connect(
    self.table, 
    QtCore.SIGNAL('itemChanged(QTableWidgetItem*)'), 
    someFunc 
) 
+0

Так попробовал линию вы предложили, и я получаю AttributeError: itemChanged. – JLYK

+0

@JLYK: Какую версию PyQt вы используете? – jdi

+0

pyqt4. Я просто изменил строку, которую вы передали мне в QtCore.QObject.connect (self.table, QtCore.SIGNAL ('itemChanged (QTableWidgetItem *)'), someFunc). Похоже, что он работает по большей части. Тем не менее функция вызывает несколько раз, но я думаю, что это другой набор проблем. – JLYK

Смежные вопросы