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 :

Ne pas terminer l'edition d'une cellule d'un QTableWidget sur "Return"


Sujet :

PyQt Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Points : 38
    Points
    38
    Par défaut Ne pas terminer l'edition d'une cellule d'un QTableWidget sur "Return"
    Bonjour,

    J'ai une fenetre où j'ai entre autre une table (type QTableWidget).
    Dans cette table, l'utilisateur doit saisir des données et peut avoir besoin d'un retour chariot dans la fenetre.
    Je souhaiterai ne pas terminer l'édition lorsque l'utilisateur appuie sur la touché "Enter" ou "Return", mais reviens à la ligne ( equivalent à "\n").
    Je ne trouve pas d'option de multiline d'une cellule.
    J'ai surcharge la function keyevent du tableau pour récupérer les events de la touché "enter" et "return".
    Mais lorsque je rajoute "\n" à mon texte, je reste sur la meme ligne et je perd le mode d'édition.
    Mon but est d'avoir une petite feuille excel, et faire la meme chose que sous excel avec la combinaison "ALT+ENTER", mais dans mon tableau avec juste la touché "ENTER"
    Merci d'avance pour vos responses

    Julien

  2. #2
    Membre régulier
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2015
    Messages : 52
    Points : 94
    Points
    94
    Par défaut
    Salut,

    Par défaut un QTableWidget créé un QLineEdit pour l'édition. Hors ce widget ne permet que d'afficher une seule ligne.
    Pour customiser le comportement des cellules du QTableWidget, il te faut sous-classer un QItemDelegate (ou un QStyleItemDelegate). Tu dois implémenter les méthodes suivantes :


    • createEditor() returns the widget used to change data from the model and can be reimplemented to customize editing behavior.
    • setEditorData() provides the widget with data to manipulate.
    • updateEditorGeometry() ensures that the editor is displayed correctly with respect to the item view.
    • setModelData() returns updated data to the model.


    Voici un exemple minimaliste.
    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import sys
    from PyQt4 import QtGui
    from PyQt4.QtCore import Qt
     
    class QPlainTextItemDelegate(QtGui.QStyledItemDelegate):
        def createEditor(self, parent, option, index):
            plaintext_editor = QtGui.QPlainTextEdit(parent)
            return plaintext_editor
     
        def setEditorData(self, editor, index):
            text = index.model().data(index, Qt.EditRole)
            editor.setPlainText(text)
     
        def setModelData(self, editor, model, index):
            text = editor.document().toPlainText()
            model.setData(index, text, Qt.EditRole)
     
        def updateEditGeometry(self, editor, option, index):
            editor.setGeometry(option.rect)
     
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        table = QtGui.QTableWidget(3, 1)
        table.setItemDelegate(QPlainTextItemDelegate())
        widget_item = QtGui.QTableWidgetItem("First line\nSecond line.")
        table.setItem(0, 0, widget_item)
        vertical_header = table.verticalHeader()
        vertical_header.setResizeMode(QtGui.QHeaderView.Interactive)
        vertical_header.setDefaultSectionSize(50)
        table.setColumnWidth(0, 200)
        table.show()
        app.exec_()

Discussions similaires

  1. Edition d'une cellule non sélectionnée
    Par darling dans le forum Composants
    Réponses: 9
    Dernier message: 31/03/2010, 19h00
  2. [JXTable] Taille de l'edition dans une cellule ?
    Par rednik dans le forum Composants
    Réponses: 1
    Dernier message: 20/08/2008, 15h50
  3. Réponses: 1
    Dernier message: 30/07/2008, 13h35
  4. Edition d'une cellule d'un JTable
    Par teuteu62 dans le forum Composants
    Réponses: 3
    Dernier message: 05/01/2006, 15h16

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