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 :

Lancer un script python externe quand le script principal n'est plus actif


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut Lancer un script python externe quand le script principal n'est plus actif
    Bonjour à tous.
    Je pense que la question est bien formulée. Mais je précise. Mon script principal tourne sous Ubuntu, il répond, selon le contexte, aux pressions de différentes touches du clavier. Pour cela j'utilise tkinter et sa gestion des évènement avec un :
    fen1.bind('<Key>', le_filtre)
    fen1.mainloop()

    en fin de script.
    Et dans la fonction le-filtre(event)
    j'ai un
    lt = str(event.keysym) qui filtre les évènements et ne laisse passer que ceux qui sont effectivement attendus.
    Les évènements "clavier" peuvent provenir d'une interface électronique qui simule l'appui sur une des touches reconnues. Or il arrive que parfois aucun évènement ne se produise, parfois pendant plusieurs heures, je voudrais alors lancer un script secondaire qui ouvrirait une nouvelle fenêtre l'affichage. Bien entendu ce script secondaire serait lui aussi capable de recevoir les évènements externes et céderait la place au script principal quand un évènement surviendrait.
    Donc pour résumer : on est sous le script principal, si pas d'évènements pendant 5 minutes, on cache la fenêtre du script principal, si event : on affiche la fenêtre du script principal.
    Notez que je ne suis pas opposé à l'idée de remplacer le script secondaire par une fonction supplémentaire qui se contenterait d'afficher une fenêtre pour cacher celle des autres fonctions
    Ni d'ailleurs à l'emploi de Thread... Mais, je ne sais pas. Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Pour masquer une fenêtre, les méthodes iconify et withdraw suffisent.

    -*- edit -*- La difficulté sera l'appel à deiconify: l'application car les évènements de type "Key" ne sont reçus que si la fenêtre a le focus => on n'a plus d'event. Mais pourquoi remplacer une fenêtre par une autre fenêtre plutôt que de changer le contenu de celle-ci?


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

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    J'utiliserai after() et un flag pour gérer le test des 5mn d'inactivité ...

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    ..... Mais pourquoi remplacer une fenêtre par une autre fenêtre plutôt que de changer le contenu de celle-ci?
    - W
    oui, pourquoi ?
    Amusant de constater que les solutions les plus simples nous semblent parfois très ardues. Il faut dire que ma fenêtre principale, qui mesure tout de même (850X900) et qui contient environ une quarantaine de Labels ou Canvas m'a tellement "bassiné" à mettre au point esthétiquement qu'y toucher par la suite me semblait hors de question. Et c'est vrai qu'en fait elle n'apparaît pas dans le script principal, puisque je ne fais que l'importer via un import gui et que la litanie des réglages Label et Canvas reste toujours cachée.
    Merci donc pour votre réponse qui comme toujours jusqu'à présent m'a été très profitable. A tel point que quand je pose une question sur ce forum, mon secret désir est : pourvu que wistricks, me réponde.

    Citation Envoyé par hominidé
    Bonjour,
    J'utiliserai after() et un flag pour gérer le test des 5mn d'inactivité ...
    La encore, merci, le module time et le gestionnaire d' évènements vont certainement me proposer de quoi gérer dans une boucle while ce délai de 5 minutes après lequel j'afficherais le résultat du traitement actualisé.
    Merci à vous deux. Je reviendrais sur ce sujet si je m'embrouille dans la gestion des fenêtres.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Amusant de constater que les solutions les plus simples nous semblent parfois très ardues. Il faut dire que ma fenêtre principale, qui mesure tout de même (850X900) et qui contient environ une quarantaine de Labels ou Canvas m'a tellement "bassiné" à mettre au point esthétiquement qu'y toucher par la suite me semblait hors de question.
    Pas besoin d'y toucher: on peut tout mettre dans une Frame (à la place du Toplevel qu'est Tk()) et remplacer cette Frame par une autre qui contiendra ce qu'on veut.
    Et on pourra "switcher" entre les deux "à la demande" (en fonction des évènements qui...).

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

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par azad2b Voir le message

    La encore, merci, le module time et le gestionnaire d' évènements vont certainement me proposer de quoi gérer dans une boucle while ce délai de 5 minutes après lequel j'afficherais le résultat du traitement actualisé.
    Une boucle va te bloquer le mainloop() . Si tu tiens à en utiliser avec tkinter, il te faudra gérer toi même son appel...
    Sinon pour illustrer ma proposition d'utiliser after()/flag:
    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
    import tkinter as tk
     
     
    root = tk.Tk()
    root.flag = False
     
    def do(event=None):
        if event:    
            if not root.flag:
                root.callback = root.after(10000, do)
                root.flag = True
                print('clic gauche souris')
            else:
               root.after_cancel(root.callback)
               root.flag = False
               do(event=True)
        else:
            if root.flag:
                print('1O secondes se sont écoulées sans clic gauche souris')
     
    root.bind('<1>', do)
    root.mainloop()
    note: le script comptera 10s d'abscence d'événement clic gauche de la souris qu'à partir d'un premier clic...

Discussions similaires

  1. Lancer un script shell depuis un script python
    Par freestyler dans le forum Général Python
    Réponses: 18
    Dernier message: 04/10/2011, 09h59
  2. Réponses: 8
    Dernier message: 30/09/2009, 18h25
  3. lancer un script shell et recupérer les résultats via script python
    Par GoldenEyes dans le forum Général Python
    Réponses: 2
    Dernier message: 04/09/2008, 18h15
  4. [Système] Lancer un script python en PHP
    Par gannher dans le forum Langage
    Réponses: 10
    Dernier message: 13/09/2007, 11h24
  5. Réponses: 1
    Dernier message: 01/03/2006, 11h27

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