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 :

Ajouter du texte à un QPlainTextEdit


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Par défaut Ajouter du texte à un QPlainTextEdit
    Bonjour,

    J'essaye de remplir un QPlainTextEdit à partir d'un autre thread, alors il parait qu'il faut utiliser les signaux et les slots pour ça ; mais comme je débute, évidemment, ça ne marche pas : rien n'est affiché.

    Mon code peut se résumer à ceci : (il a peut-être l'air un peu sale comme ça, mais c'est parce que j'en ai retiré tout ce qui est inutile)
    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
    import threading
    from PyQt4 import QtCore, QtGui
     
    class Ui_window(object):
        def setupUi(self, window):
            window.setObjectName("window")
            window.resize(761, 591)
            self.commandsHistory = QtGui.QPlainTextEdit(self.window)
            self.commandsHistory.setObjectName("commandsHistory")
     
     
    def printer(window):
        window.emit(QtCore.SIGNAL('printReply(%s)' % row))
     
    class Window(QtGui.QTabWidget, window.Ui_window):
        def __init__(self, parent=None):
            QtGui.QWidget.__init__(self, parent)
            self.setupUi(self)
     
            self.connect(self, QtCore.SIGNAL('printReply()'),
                         self.commandsHistory, QtCore.SLOT('appendPlainText()'))
     
            threading.Thread(target=getReplies, args=(self,),
                             name='Fetch replies').start()
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
     
        w = Window()
        w.show()
     
        sys.exit(app.exec_())
    Merci d'avance,
    ProgVal

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu es sur que ton thread fonctionne en étant instancié comme ça ?

    Disons que ça fonctionne, pour le signal, dans le code du thread, déclare ton signal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MonThread(Thread):
        def __init__(self, args):
            ...
     
        def run(self):
            signal = NotifySignal()
            signal.bind(ui)      # ui represente l'instance de ta fenetre contenant le plainTextEdit
            ...
            # lorsque fini
            signal.value = "le texte a afficher"        
            signal.emit_signal()
    Le signal, je te met un exemple que j'ai sous le coude:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class NotifySignal(QtCore.QObject):
        loadFinished = QtCore.pyqtSignal()
     
        def bind(self, ui):
            self.ui = ui
            self.value = None
            self.loadFinished.connect(self.show)
     
        def emit_signal(self):
            self.loadFinished.emit() 
     
        def show(self):
            self.ui.monPlainText.appendPlainText(self.value)
    Mon signal s'appelle loadFinished mais tu le nommes comme tu veux bien sur.

  3. #3
    Membre très actif
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Par défaut
    Pour mon thread : oui, je suis sûr que ça marche. Je ne sais pas pourquoi, mais tout le monde croit qu'on est obligé de sous-classer Thread, alors qu'une simple instanciation suffit. En spécifiant le paramètre target=, ça remplace la méthode run() par le callable passé à travers target=.

    Je regarde, pour le code.

Discussions similaires

  1. Ajouter du texte dans une edit box
    Par raf_gug dans le forum MFC
    Réponses: 10
    Dernier message: 23/05/2013, 10h00
  2. Ajouter du texte dans un input à partir d'une autre fenêtre
    Par Michaël dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2005, 20h14
  3. [jTextPane] Ajouter du texte à la suite...
    Par doudine dans le forum Composants
    Réponses: 2
    Dernier message: 03/01/2005, 13h38
  4. Ajout de texte dans un fichier
    Par willowII dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 24/08/2004, 19h30
  5. [TWebBrowser] Comment ajouter du texte ?
    Par el_diablos dans le forum Composants VCL
    Réponses: 18
    Dernier message: 06/07/2004, 09h17

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