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

Python Discussion :

liaison en thread principale et secondaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut liaison en thread principale et secondaire
    Bonjour à tous.

    Je rencontre un petit souci entre le thread principale et secondaire.

    Dans le thread principale qui est ma fenetre d'interface developper sous PyQt5, j'envoie une variable "NomSQL" a un thread secondaire pour effectuer une lecture d'une base de donnée SQL. Jusque la tout vas bien.

    A la lecture, le thread enregistre les valeur dans 2 tableaux X et Y avec des valeur int. la aussi tout vas bien.

    Je bloque sur le moyen d'envoyer ces 2 tableaux au thread principale pour dessiner un graphique. Je pense que c'est qu'une histoire de paramètres dans cette ligne : "Graphique = pyqtSignal(int,int) "mais je ne trouve pas .

    Voici le code du thread:
    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
    class Matplot(QtCore.QThread):                                                          # Thread de creation Table SQL
     
            Graphique = pyqtSignal(int,int)                                                 # liaison signal entre la fenetre et le thread
     
            def __init__(self, parent, NomSQL):
     
                    super(Matplot, self).__init__(parent)                                   # Permet la transmission de parametre entre la class fenetre et le QThread
     
                    self.NomSQL = NomSQL                                                    #Transmission de la variable Nb
     
            def run(self):
     
                    X = []
     
                    Y = []
     
                    try:
     
                            mydb = mc.connect(
     
                                    host="localhost",
     
                                    user=USER.strip(), 
     
                                    password=MDP.strip(), 
     
                                    database="RADIORT"
     
                            )
     
                            mycursor = mydb.cursor()
     
                            query1 = "SELECT time FROM " + self.NomSQL
     
                            query2 = "SELECT BdfMoy FROM " + self.NomSQL
     
                            mycursor.execute(query1)
     
                            rows = mycursor.fetchall() 
     
                            for row in rows: 
     
                                    X.append(int('{0}'.format(row[0])))
     
                            mycursor.execute(query2)
     
                            rows = mycursor.fetchall() 
     
                            for row in rows: 
     
                                    Y.append(int('{0}'.format(row[0])))
     
                            self.Graphique.emit(X, Y)
     
     
                    finally:
     
                            mydb.close()
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 224
    Par défaut
    Hello,
    Citation Envoyé par Mike1979 Voir le message
    Je rencontre un petit soucis entre le thread principale et secondaire.
    Mon message est hors sujet mais comme je vois dans les forums que la majorité du temps le mot souci est mal orthographié, pour remettre les gens dans la bonne direction voici une petite leçon d'orthographe :
    Le nom souci nous cause bien du souci. Est-ce parce que l’on pense à « une souris » qu’on a envie de mettre un « s » au singulier à « souci » ? Quoi qu’il en soit, il n’y en a pas !
    Le nom souci se termine par « i » au singulier, quel que soit le sens qu’on lui donne.
    –> Il désigne d’une part une préoccupation qui trouble, qui inquiète (et l’objet de cette préoccupation).
    Exemples : « Avoir un souci à régler », « Mon travail est mon principal souci ».
    Il est, en ce sens, très proche des noms contrariété, problème ou tracas.
    –> C’est d’autre part le nom d’une plante des champs (et les fleurs de cette plante).
    Exemples : « Le souci est facile à cultiver », « Quelles sont les vertus du souci ? ».
    En résumé, on écrit « un souci », « du souci »…


    Bien sûr, si l’on ajoute un « s », le nom souci passe au pluriel : des soucis
    Ami calmant, J.P


  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Déjà il y a un sous-partie du forum Python dédiée PyQt. Poster là bas t'offre plus de chances d'avoir des réponses complètes car ceux qui y évoluent et qui ne viennent pas forcément ici sont des experts dans ce domaine (exemple tyrtamos en connait dix fois plus que moi sur PyQt).

    Sinon pyqtSignal() sert à transmettre un signal entre deux objets Qt. Effectivement ce signal peut embarquer des valeurs (chez-toi deux int).
    Donc il faut que le thread émette le signal en y donnant les int, exemple self.Graphique[int, int].emit(123, 456) (enfin personnellement je nomme mes signaux "sigTruc"). Et l'objet qui le reçoit doit avoir programmé sa réception, exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // thread principal
    class truc:
    	def __init__(self):
    		self.thread_fils=Matplot(...)
    		self.thread_fils.Graphique[int, int].connect(slotTruc)
    	...
    	...
    	... (plus bas dans le code)
            @pyqtSlot(int, int)
    	def slotTruc(self, x, y):
    		print(x, y)
    # class truc

    Un exemple plus complet ici: https://python.developpez.com/telech...s-notre-signal.

    Maintenant ce n'est pas parce qu'on est en informatique que l'orthographe est à oublier. L'orthographe est justement l'élément qui permet de transcrire une idée, une notion. "a oublié" et "à oublier" ne signifient pas la même chose (comme dans "fenêtre d'interface développée sous Qt5" et non pas "fenetre d'interface développer sous Qt5"). Si un thread c'est singulier, alors son adjectif "principal" doit aussi être au singulier (ou alors tu considères "thread" comme féminin mais alors c'est "la thread" et non "le thread"). Envoyer quelque chose "à quelqu'un" ce n'est pas "a quelqu'un". Et l'adverbe "là" permet d'indiquer un lieu ou un temps comme "jusque là", par opposition à "la", article défini. Et la conjugaison de "aller" à la 3° personne du singulier du présent de l'indicatif c'est "il va" (ou "tout va" et non pas "tout vas").
    Je fais l'effort de bien écrire pour que la lecture soit agréable sans que tu sois là (tiens, encore ce même adverbe de lieu ou de temps) à "lagguer" à revenir au début de chaque phrase tous les trois mots parce que le sens de ces mots va à l'encontre du sens général de cette phrase, fais-en autant pour ceux qui doivent te lire.

    Et (enfin là ce n'est qu'un détail), mettre des lignes vides dans un code permet de grouper des choses. Si le code contient 8 lignes, puis une ligne vide, puis 7 lignes, on peut penser que les 8 premières feront une action précise, et que les 7 autres en feront une autre (surtout si on prend en plus soin de mettre un commentaire en début pour dire "ce truc va faire cette chose"). Mais mettre une ligne vide sous chaque instruction là ça ne sert plus à rien, voire même ça rend le code plus difficile à suivre.

    Citation Envoyé par jurassic pork Voir le message
    comme je vois dans les forums que la majorité du temps le mot souci est mal orthographié
    Ah, lui je ne l'avais pas vu
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 742
    Par défaut
    Salut,

    Citation Envoyé par Mike1979 Voir le message
    Je pense que c'est qu'une histoire de paramètres dans cette ligne : "Graphique = pyqtSignal(int,int) "mais je ne trouve pas .
    Les paramètres X et Y étant des listes, le signal devrait être définit par pyqtSignal(list, list)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Les paramètres X et Y étant des listes, le signal devrait être définit par pyqtSignal(list, list)

    - W
    Merci c'était bien c'est bien cela. Cela fonctionne correctement.

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

Discussions similaires

  1. [2008R2] Rechercher des tables inconnues en relation avec une table principale ou secondaire
    Par Nonoleplongeur dans le forum Développement
    Réponses: 1
    Dernier message: 16/06/2016, 20h54
  2. permuter controleur de domaine principale et secondaire
    Par coseur dans le forum Développement
    Réponses: 0
    Dernier message: 09/04/2010, 13h46
  3. communication fenêtre principale / fenêtre secondaire
    Par Sylvain__A_ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/12/2008, 11h50
  4. fenetre principale et secondaire
    Par une_tite_question dans le forum NetBeans
    Réponses: 2
    Dernier message: 23/04/2008, 14h25
  5. Fenêtre principale et secondaire
    Par FranT dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/07/2002, 19h25

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