IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Mise à jour d'un item de QTableWidget [QtGui]


Sujet :

PyQt Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Géomaticien
    Inscrit en
    Mars 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 35
    Points : 26
    Points
    26
    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 : 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

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    remplace
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elif item.column() == 1:

  3. #3
    Nouveau membre du Club
    Profil pro
    Géomaticien
    Inscrit en
    Mars 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 35
    Points : 26
    Points
    26
    Par défaut
    Oups effectivement, je l'avais pas vu celle là ...
    Ceci dit ça ne suffit pas car il me reste mon problème de signal
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/03/2007, 09h37
  2. [mise à jour]Comment procéder sans tout péter...
    Par FFF dans le forum Installation
    Réponses: 3
    Dernier message: 10/09/2003, 08h11
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo