Bonjour
Voila mon problème, j'ai un QTableWidget avec 2 colonnes. Je souhaite que lorsque l'on modifie une cellule de la colonne 0, cela modifie la cellule de la ligne au dessus dans la colonne 1 et inversement, lorsque je modifie une cellule de la colonne 1 cela modifie la cellule de la ligne en dessous dans la colonne 0.
Pour cela j'ai utilisé un slot de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
QObject.connect(self.ui.tb_bornes_CC, SIGNAL('itemChanged(QTableWidgetItem *)'), self._itemChanged)
et la fonction _itemChanged
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
        def _itemChanged(self, item):
                #QMessageBox.warning(self,"Warning",'Bonjour')
                if item.column() == 0:
                        self.ui.tb_bornes_CC.setItem(item.row()-1,1,QTableWidgetItem(item.text(),0))
                if item.column() == 1:
                        if item.row() == self.ui.tb_bornes_CC.rowCount()-1:
                                QMessageBox.warning(self,"Warning",'Cette cellule n\'est pas modifiable')
                                item.setText('-')
                        else:
                                self.ui.tb_bornes_CC.setItem(item.row()+1,0,QTableWidgetItem(item.text(),0))
J'obtiens une erreur de type
Traceback (most recent call last):
File "boa_main_ajoutCC_20130221.py", line 140, in _itemChanged
if item.column() == 1:
RuntimeError: underlying C/C++ object has been deleted
Qui j'imagine provient du fait que lorsque je modifie un item, il change celui que je veux au premier coup mais que comme ce dernier est modifié il relance le slot.
Je ne vois pas comment résoudre cela, auriez vous une idée ?

Merci à tous

PS : tb_bornes_CC est ma QTableWidget