PySide / PyQt: 'TypeError: собственный сигнал Qt не вызывается' при попытке использовать 'currentItemChanged' с QTableWidget

У меня есть таблица с некоторыми данными, которые я хочу редактировать с помощью QTableWidget. При попытке подключить сигнал currentItemChanged:

self.QTableWidget.currentItemChanged(QTableWidgetItem,QTableWidgetItem).connect(self.editCell)

Я получаю следующую ошибку:

'TypeError: native Qt signal is not callable' 

Я заглянул в QtDesigner, где можно подключить сигналы. Я сделал QTableWidget и соединил его с ярлыком, так что изменение currentItem скрывало ярлык.

В диалоге подключения сигналов сигнал currentItemChanged был записан так:

currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)

Я не знаю, что означает *, но полагаю, что это важно.

Я использую неправильный сигнал или у меня почему-то неправильный синтаксис? Короче говоря, я хочу, чтобы при изменении любого конкретного элемента / ячейки подавался сигнал (я не уверен, в чем разница)

__ _ __ _ __ _ __ _ __ _ __ _ __ ИЗМЕНИТЬ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _

РЕДАКТИРОВАТЬ: В документации класса QTableWidgetItem я также обнаружил, что у него есть функции column () и row ().

Я пробовал добавлять их вот так:

self.QTableWidget.currentItemChanged(QTableWidgetItem.column(QTableWidgetItem.column()),QTableWidgetItem.row()).connect(self.editCell)

Но получил ошибку:

TypeError: descriptor 'column' requires a 'PySide.QtGui.QTableWidgetItem' object but received a 'Shiboken.ObjectType

person UrbKr    schedule 10.10.2013    source источник


Ответы (1)


Этот бит касается:

self.QTableWidget

Если ваша таблица буквально называется «QTableWidget», в дальнейшем может возникнуть путаница. В частности, из-за возникшей ошибки создается впечатление, что вы звоните QTableWidget.currentItemChanged.

Также стоит ознакомиться с документацией PyQT по «сигналам нового стиля», особенно по работе с перегрузками., чтобы понять, как все это работает. Однако, к счастью, QTableWidget.currentItemChanged не перегружен, поэтому код, который вы должны использование должно быть просто:

self.yourTable.currentItemChanged.connect(self.editCell)

Что касается ваших более поздних правок, в этом коде:

currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)

Анализируемые QTableWidgetItem являются аргументами, которые передаются сигналу. Вы не можете их изменить, поскольку они определены в методе, определяющем слот, и передаются при срабатывании сигнала. Из документации, указанной выше:

void currentItemChanged (QTableWidgetItem *, QTableWidgetItem *)

Этот сигнал излучается всякий раз, когда изменяется текущий элемент. Предыдущий элемент - это элемент, который ранее был в фокусе, текущий - это новый текущий элемент.

person Community    schedule 11.10.2013
comment
Нет, QTableWidget - это не имя моей таблицы, я просто подумал, что это сделает его более понятным. Оглядываясь назад, я не знаю, как я так думал. Спасибо, ваше предложение сработало, однако, похоже, я неправильно понял, что имелось в виду под «currentItemChanged». Я думал, это означает отредактировано. Следует внимательно прочитать документацию. - person UrbKr; 11.10.2013