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 :

QTableWidgetItem et flags [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre � l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par d�faut QTableWidgetItem et flags
    Bonjour � tous,

    Je tiens d'abord � vous remercier en vous disant que gr�ce � l'ensemble des posts (et surtout des r�ponses) dans ce forum, de nombreuses questions que je me posais ont �t� r�solues sans que je prenne la peine de les poser. Donc merci � vous tous.

    Voil� le probl�me qu'il se pose � moi et qui me fait me tourner vers vous aujourd'hui: je suis en train de faire une interface graphique pour un programme que j'ai d�velopp�. Ce programme traite des donn�es de m�trologie optique, et ce afin de suivre l'�volution de la gravure de composants micro�lectroniques en temps r�els. Voil� pour le contexte.

    Je vais mettre le code que je d�veloppe plus loin, laissez moi d�crire d'abord mon probl�me.

    La r�solution de ce programme est diff�rente selon la g�om�trie du composant, c'est pourquoi je demande � l'utilisateur de sp�cifier la g�om�trie utilis�e pour la r�solution du probl�me (via des checkbox). Chaque g�om�trie � des dimensions propres, que l'utilisateur peut sp�cifier via l'utilisation d'un QTableWidget.

    Mon probl�me est le suivant : je veux que lorsque l'utilisateur choisi une g�om�trie donn�e, les cellules du QTableWidget �ditables soient uniquement celles correspondant � la g�om�trie, c'est � dire que lorsque je clique sur la check box correspondantes, toutes les dimensions non n�cessaires soient non �ditables. Ca, c'est bon, je sais le faire grace au QTableWidgetItem.setFlags(QtCore.Qt.ItemIsEditable).

    Le probl�me que je rencontre est plut�t l'inverse. Je veux que lorsque je d�coche la checkbox, toutes les cellules qui ont �t� desactiv�es se r�activent. Et la je bloque, j'ai bien essay� un ~QtCore.Qt.ItemIsEditable ou un QtCore.Qt.ItemNoFlags, rien n'y fait. Quelqu'un aurait une id�e?

    Voil� l'architecture du code me posant probl�me :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    def __init__(self,parent=None):
    ## initialisation du tableau, Table est un QTableWidget ##
        self.Table.setRowCount(1)
        self.Table.setColumnCount(18)
        self.connectActions()
     
    def connectActions(self):
        self.RectangleGeom_CheckBox.clicked.connect(self.StateCell) ## RectangleGeom_CheckBox est une des checkbox permettant de choisir la géométrie du composant ##
     
    def StateCell(self):
        if(self.RectangleGeom_CheckBox.isChecked()):
        ## On desactive des cellules, ça ok, ça marche ##
            for j in [0,2,3,4,6]: ## coordonnées des cellules qui doivent être desactivées ##
                item=QtGui.QTableWidgetItem()
                item.setFlags(QtCore.Qt.ItemIsEditable)
                self.Table.setItem(0,j,item)
        else :
        ## dans le cas contraire, les cellules doivent être réactivées ##
            for j in [0,2,3,4,6]:
                item=QtGui.QTableWidgetItem()
                ## et là, je sais pas, ça fonctionne pas, des idées? ##
                item.setFlags(~QtCore.Qt.ItemIsEditable)
                self.Table.setItem(0,j,item)
    En esp�rant avoir �t� assez pr�cis. N'h�sitez pas � me demander si des questions persistent.

    Merci � vous !

    Koamh

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2009
    Messages
    197
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Ao�t 2009
    Messages : 197
    Par d�faut
    Essaie ceci :
    setFlags( QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)

    tu peux mettre plusieurs flags

  3. #3
    Membre � l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par d�faut
    Merci de ta r�ponse,

    En fait, j'avais d�j� essay� ce genre de chose, au temps pour moi, j'ai oubli� de le signaler...

    J'ai un peu remanier mon code depuis ce matin, et j'ai ainsi impl�ment� deux fonctions permettant de changer les flags :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def enableEdit(self,Item): ## Item étant un QTableWidgetItem ##
        eFlags=Item.flags()
        eFlags|=QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEditable
        return eFlags
     
    def disableEdit(self,Item):
        eFlags=Item.flags()
        eFlags &= ~(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable )
        return eFlags
    Ce que je trouve bizarre est que je peux intervertir exactement les deux fonctions, �a me donnera le m�me r�sultats : les cellules sont desactiv�es...

    O� ai-je fais la boulette?

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2009
    Messages
    197
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Ao�t 2009
    Messages : 197
    Par d�faut
    j'ai l'impression que tu concat�nes des flags au fur et � mesure..

    exemple de code ok rapidos chez moi:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    # -*- coding: utf-8 -*-
    from PyQt4 import QtGui,QtCore
     
    EDITABLE = QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
    NONEDITABLE = QtCore.Qt.ItemIsEnabled
     
    class maFen(QtGui.QWidget):
      def __init__(self,parent=None):
        super(maFen,self).__init__(parent)
        self.setLayout(QtGui.QVBoxLayout())
     
        self.up = QtGui.QWidget()
        self.up.setLayout(QtGui.QHBoxLayout())
        self.up.setFixedHeight(50)
        self.but = QtGui.QPushButton("EDITABLE")
     
        self.up.layout().addWidget(self.but)
        self.up.layout().addStretch()
     
        self.table = QtGui.QTableWidget()
        self.table.setColumnCount(3)
        self.table.setRowCount(2)
     
        self.layout().addWidget(self.up)
        self.layout().addWidget(self.table)
     
        self.remplir()
        self.connect (self.table, QtCore.SIGNAL ("itemClicked (QTableWidgetItem *)"), self.clickItem)
        self.but.clicked.connect(self.pushButt)
     
     
      def remplir(self):
        for r in range(2):
          for c in range(3):
            it = QtGui.QTableWidgetItem(str(2*r+c))
            it.setFlags(EDITABLE)
            self.table.setItem(r,c,it)
     
      def clickItem(self,it):
        if it.flags() == EDITABLE:
          self.but.setText("EDITABLE")
        else:
          self.but.setText("NON EDITABLE")
     
      def pushButt(self):
        it = self.table.currentItem()
        if it.flags() == EDITABLE:
          it.setFlags(NONEDITABLE)
        else:
          it.setFlags(EDITABLE)
        self.clickItem(it)
     
     
     
     
    if __name__=='__main__':
      import sys
      app=QtGui.QApplication(sys.argv)
     
     
      fen = maFen()
      fen.show()
      sys.exit(app.exec_())

  5. #5
    Membre � l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par d�faut
    Bon ben, j'ai modifi� mon code avec tes recommandations (en gros j'ai pomp� ton code), et �a marche.

    J'ai toujours pas compris pourquoi, mais bon...

    En tout cas un grand merci � toi !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [MFC] Flags sur OnKeyDown
    Par nico-pyright(c) dans le forum MFC
    R�ponses: 5
    Dernier message: 03/10/2005, 10h00
  2. R�ponses: 1
    Dernier message: 11/09/2005, 02h04
  3. [D�butant]Fonction avec des flags
    Par @r$�~%[ dans le forum C++
    R�ponses: 10
    Dernier message: 22/08/2005, 10h19
  4. [langage] Flags et listes
    Par claire14pb dans le forum Langage
    R�ponses: 22
    Dernier message: 23/05/2005, 22h54
  5. Flags ??
    Par foussa dans le forum Assembleur
    R�ponses: 21
    Dernier message: 19/10/2002, 18h36

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