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 :

Utilisation de toPlainText sur un QTextEdit créé dynamiquement


Sujet :

PyQt Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Utilisation de toPlainText sur un QTextEdit créé dynamiquement
    Bonjour,
    je crée dynamiquement des QTextEdit et je souhaiterais récupérer le texte qu'ils contiennent (texte que l'utilisateur aura tapé). J'inciste sur le fait que les QTextEdit ont été rajoutés dynamiquement. Voir les deux codes suivants.

    Code window_TestOnglets.py (définition en dur de l'application)
    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
    from PyQt4 import QtCore, QtGui
     
    class Ui_window_TestOnglets(object):
        def setupUi(self, window_TestOnglets):
            window_TestOnglets.setObjectName("window_TestOnglets")
            window_TestOnglets.resize(QtCore.QSize(QtCore.QRect(0,0,467,606).size()).expandedTo(window_TestOnglets.minimumSizeHint()))
            window_TestOnglets.setMinimumSize(QtCore.QSize(467,571))
            window_TestOnglets.setWindowIcon(QtGui.QIcon("im_1.png"))
     
            self.centralwidget = QtGui.QWidget(window_TestOnglets)
            self.centralwidget.setObjectName("centralwidget")
     
            self.tabWidget = QtGui.QTabWidget(self.centralwidget)
            self.tabWidget.setGeometry(QtCore.QRect(10,20,440,510))
            self.tabWidget.setObjectName("tabWidget")
     
            self.onglet_1 = QtGui.QWidget()
            self.onglet_1.setObjectName("onglet_1")
     
            self.textEdit_1 = QtGui.QTextEdit(self.onglet_1)
            self.textEdit_1.setGeometry(QtCore.QRect(10,10,401,451))
            self.textEdit_1.setObjectName("textEdit")
            self.tabWidget.addTab(self.onglet_1,"")
            window_TestOnglets.setCentralWidget(self.centralwidget)
     
            self.menubar = QtGui.QMenuBar(window_TestOnglets)
            self.menubar.setGeometry(QtCore.QRect(0,0,467,21))
            self.menubar.setObjectName("menubar")
     
            self.menuTest = QtGui.QMenu(self.menubar)
            self.menuTest.setObjectName("menuTest")
            window_TestOnglets.setMenuBar(self.menubar)
     
            self.statusbar = QtGui.QStatusBar(window_TestOnglets)
            self.statusbar.setObjectName("statusbar")
            window_TestOnglets.setStatusBar(self.statusbar)
     
            self.actionOuvrir = QtGui.QAction(window_TestOnglets)
            self.actionOuvrir.setObjectName("actionOuvrir")
            self.menuTest.addAction(self.actionOuvrir)
            self.menubar.addAction(self.menuTest.menuAction())
     
            self.retranslateUi(window_TestOnglets)
            self.tabWidget.setCurrentIndex(0)
            QtCore.QMetaObject.connectSlotsByName(window_TestOnglets)
     
        def retranslateUi(self, window_TestOnglets):
            window_TestOnglets.setWindowTitle(QtGui.QApplication.translate("window_TestOnglets", "window_TestOnglets", None, QtGui.QApplication.UnicodeUTF8))
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.onglet_1), QtGui.QApplication.translate("window_TestOnglets", "Fichier", None, QtGui.QApplication.UnicodeUTF8))
            self.menuTest.setTitle(QtGui.QApplication.translate("window_TestOnglets", "Test", None, QtGui.QApplication.UnicodeUTF8))
            self.actionOuvrir.setText(QtGui.QApplication.translate("window_TestOnglets", "Ouvrir", None, QtGui.QApplication.UnicodeUTF8))
            self.actionOuvrir.setShortcut(QtGui.QApplication.translate("window_TestOnglets", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8))
    Code TestOnglets.py (voir la fonction nouvelOnglet pour la création dynamique des QTextEdit)
    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
    #!/usr/bin/env python
     
    # On importe les bibliothèques que nous allons utiliser.
    import sys
    from PyQt4 import QtCore, QtGui
     
    # On importe notre application et les boîtes de dialogue.
    from window_TestOnglets import Ui_window_TestOnglets
     
    # # # # # # # # # # # # # # # # # # # # # # # #
    # Comportement de la boîte de dialogue.   DEBUT
     
    class window_TestOnglets(QtGui.QMainWindow, Ui_window_TestOnglets):
    	def __init__(self):
    		QtGui.QMainWindow.__init__(self)
    		Ui_window_TestOnglets.__init__(self)
    		self.setupUi(self)
     
    # Connection du menu.
    		self.connect(self.actionOuvrir, QtCore.SIGNAL("triggered()"),self.Ouvrir)
     
    # Les variables
    		self.nbreFichier = 0 # Nbre de fichiers ouverts
    		self.tabloFichier = [] # Tableau contenant les chemins complets des fichiers ouverts (afin de ne pas ouvrir deux fois le même fichier)
     
    # Ouverture d'un fichier
    	def Ouvrir(self) :
    		self.cheminFichier = QtGui.QFileDialog.getOpenFileName(self, self.tr("Choisir le fichier"),QtCore.QDir.currentPath(),"");
     
    		if self.cheminFichier <> '':
    # Cas du tout premier onglet.
    			if self.nbreFichier == 0 :
    				self.nbreFichier += 1
    				self.textEdit_1.setText(self.cheminFichier)
    				self.tabWidget.setTabText(self.tabWidget.indexOf(self.onglet_1), QtGui.QApplication.translate("window_TestOnglets", "Fichier n°1", None, QtGui.QApplication.UnicodeUTF8))
    			else :
    				self.nbreFichier += 1
    				self.nouvelOnglet(u"Fichier n°"+str(self.nbreFichier),self.cheminFichier)
     
    # Création d'un nouvel onglet pour recevoir un nouveau fichier
    	def nouvelOnglet(self,titreTab,cheminDuFichier):
    		self.tab = QtGui.QWidget()
    		self.tab.setObjectName("onglet_"+str(self.nbreFichier))
     
    		self.textEdit = QtGui.QTextEdit(self.tab)
    		self.textEdit.setGeometry(QtCore.QRect(10,10,401,451))
    		self.textEdit.setObjectName("textFichier_"+str(self.nbreFichier))
    		self.textEdit.setText(cheminDuFichier)
     
    		self.tabWidget.insertTab(0,self.tab,titreTab)
     
    		self.tabWidget.setCurrentIndex(0)
     
    # Comportement de la boîte de dialogue.   FIN
    # # # # # # # # # # # # # # # # # # # # # # # #
     
     
    # # # # # # # # # # # # # # #
    # Lancement de l'application.
    if __name__ == "__main__":
    	app = QtGui.QApplication(sys.argv)
    	TestOnglets = window_TestOnglets()
    	TestOnglets.show()
    	sys.exit(app.exec_())

  2. #2
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Oui, mais je ne comprend pas, quel est ton pb. ?

    Tu n'utilises pas toPlainText() dans ton code source.

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Précisions sur le problème
    mchk0123,
    ce que je voudrais faire (dans le cadre d'un tuto pour débutant que je fabrique sur PyQt) ce serait la chose suivante.

    On ajoute la connection suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.connect(self.actionFermer, QtCore.SIGNAL("triggered()"),self.Fermer)
    La fonction Fermer serait la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	def Fermer(self) :		
    		textEdit = self.tabWidget.currentWidget()
    		if textEdit is None or not isinstance(textEdit, QtGui.QTextEdit):
    			print 'pb'
    		else :
    			print textEdit.toPlainText()
    Utiliser tel quel, je n'ais que des problèmes. Pourquoi ?

  4. #4
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Si tu remplace print 'pb' par print textEdit qu'est ce qu'il t'affiche ?

    Surement <...QWidget....> au lieu de <...QTextEdit...> ?

    Ce qui est prévisible car :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
           self.onglet_1 = QtGui.QWidget()
            self.onglet_1.setObjectName("onglet_1")
     
            self.textEdit_1 = QtGui.QTextEdit(self.onglet_1)
            self.textEdit_1.setGeometry(QtCore.QRect(10,10,401,451))
            self.textEdit_1.setObjectName("textEdit")
            self.tabWidget.addTab(self.onglet_1,"")
            window_TestOnglets.setCentralWidget(self.centralwidget)
    Et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	if self.nbreFichier == 0 :
    				self.nbreFichier += 1
    				self.textEdit_1.setText(self.cheminFichier)
    				self.tabWidget.setTabText(self.tabWidget.indexOf(self.onglet_1), QtGui.QApplication.translate("window_TestOnglets", "Fichier n°1", None, QtGui.QApplication.UnicodeUTF8))
    			else :
    				self.nbreFichier += 1
    				self.nouvelOnglet(u"Fichier n°"+str(self.nbreFichier),self.cheminFichier)
    En fait ton centralWidget / currentWidget pour chaque page de ton QTabWidget est un QWidget qui contient lui-même un QTextEdit.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def Fermer(self) :		
    		textEdit = self.tabWidget.currentWidget()
    Ne suffit pas, il faut plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def Fermer(self) :		
    		widget = self.tabWidget.currentWidget()
                          textEdit = widget.children()[0]

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Génial...
    Merci pour cette réponse très claire et le code qui marche super bien.

    Juste une dernière question, à propos du code widget.children()[0]? A quoi correspond le zéro ? J'imagine que c'est le 1er Composant créé dans l'onglet. C'est bien cela...

  6. #6
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Oui, c'est ça.

    Tout déscendant de QObject peut contenir d'autre objets.
    Et la propriété children permet d'accéder à ces sous-objets.

    Comme : self.tabWidget -> self.onglet_1 -> self.textEdit_1

    self.tabWidget.centralWidget() renvoi self.onglet_1
    et self.tabWidget.centralWidget().children()[0] renvoi self.textEdit_1

    J'ai mis en gras (ci-dessus) le code important.

  7. #7
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Quelle limpidité...
    Ok merci de l'info.
    Je suis en train de faire un tuto du type PyQT pour les Nuls. Lorsqu'il sera fini, je le soumettrais ici histoire de faire part des méthodes que j'ai pu trouver et de celles qu'on m'a données pour bien utiliser ce fameux PyQT, un vrai régal et d'une simplicité étonnante (quand on a les bonnes infos comme celle que tu viens de me donner).

    Sinon rien à voir mais j'ai voulu utiliser la dernière version de PyQT sous Windows et elle ne fonctionne pas. Cela semble venir d'un problème de PATH. Il faudrait que j'intervertisse deux PATH via la commande PATH de l'Invite de Commande. Sais-tu comment on fait cela ? Sinon tant pis.

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844

  9. #9
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Merci beaucoup..
    Ton dernier message a permis de répondre à ce problème d'installation, j'ai mis ceci dans le lien suivant : http://www.developpez.net/forums/sho...d.php?t=586844.

    Un grand merci...

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

Discussions similaires

  1. Utiliser une CssClass sur objet dynamique
    Par starkson dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/07/2007, 09h54
  2. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 17h22
  3. [TChart] Comment utiliser le curseur sur une courbe ?
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 29/09/2005, 16h49
  4. utilisation de postgresql sur solaris?
    Par champion dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 25/03/2005, 14h27
  5. quel language utiliser pour agir sur un log automatiquent
    Par qegukom dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/08/2004, 21h00

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