Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI > PySide et PyQt
PySide et PyQt Forum d'entraide sur PySide et PyQt
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 12h17   #1
LudoSIGMA
Candidat au titre de Membre du Club
 
Ludovic
Géomaticien
Inscription : mars 2005
Messages : 35
Détails du profil
Informations personnelles :
Nom : Ludovic

Informations professionnelles :
Activité : Géomaticien
Secteur : Service public

Informations forums :
Inscription : mars 2005
Messages : 35
Points : 14
Points : 14
Par défaut Mise à jour d'un item de QTableWidget

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 :
QObject.connect(self.ui.tb_bornes_CC, SIGNAL('itemChanged(QTableWidgetItem *)'), self._itemChanged)
et la fonction _itemChanged
Code :
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
Citation:
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
LudoSIGMA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 12h53   #2
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 938
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 938
Points : 1 405
Points : 1 405
Salut,

remplace
par
Code :
elif item.column() == 1:
__________________
Vincent
Oqapy . Qarte . PaQager
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/02/2013, 13h02   #3
LudoSIGMA
Candidat au titre de Membre du Club
 
Ludovic
Géomaticien
Inscription : mars 2005
Messages : 35
Détails du profil
Informations personnelles :
Nom : Ludovic

Informations professionnelles :
Activité : Géomaticien
Secteur : Service public

Informations forums :
Inscription : mars 2005
Messages : 35
Points : 14
Points : 14
Oups effectivement, je l'avais pas vu celle là ...
Ceci dit ça ne suffit pas car il me reste mon problème de signal
Citation:
Traceback (most recent call last):
File "boa_main_ajoutCC_20130221.py", line 146, in _itemChanged
self.ui.tb_bornes_CC.setItem(item.row()+1,0,QTableWidgetItem(item.text(),0))
RuntimeError: maximum recursion depth exceeded while calling a Python object
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 50, in apport_excepthook
if not enabled():
File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 23, in enabled
import re
RuntimeError: maximum recursion depth exceeded while calling a Python object

Original exception was:
Traceback (most recent call last):
File "boa_main_ajoutCC_20130221.py", line 146, in _itemChanged
self.ui.tb_bornes_CC.setItem(item.row()+1,0,QTableWidgetItem(item.text(),0))
RuntimeError: maximum recursion depth exceeded while calling a Python object
Mais à priori je le résoud en bloquant le signal le temps que je modifie ma cellule, ce qui donne ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
        def _itemChanged(self, item):
                self.ui.tb_bornes_CC.blockSignals(True)
                if item.column() == 0:
                        self.ui.tb_bornes_CC.setItem(item.row()-1,1,QTableWidgetItem(item.text(),0))
                elif 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))
                self.ui.tb_bornes_CC.blockSignals(False)
Merci beaucoup
LudoSIGMA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h57.


 
 
 
 
Partenaires

Hébergement Web