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

Tkinter Python Discussion :

Lancer un executable selon l'etat d'un menu


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut Lancer un executable selon l'etat d'un menu
    Bonjour,

    Voila, je débute en python et donc, forcément, bloque devant un problème qui doit être assez simple.

    Je voudrais faire une petite interface graphique pour diffents scripts et applis qui sont sur mon disque

    pour cela je souhaite avoir une fenêtre python avec une barre de menus, dans chacun de ces menus, il y aurais une liste d'options de type Checkbox.

    pour chaque option, je voudrais que mon programme lance
    Appli1.exe si l'option est cochée
    Appli 2.exe si elle est decochée
    a chaque evènement souris

    voici le debut de mon code :

    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
    from Tkinter import *
    from os import *
     
    class MenuBar(Frame):
        """Barre de menus déroulants"""
        def __init__(self, boss =None):
            Frame.__init__(self, borderwidth =2)
     
            ##### Menu <Options> #####
            optMenu = Menubutton(self, text ='Options')
            optMenu.pack(side =LEFT, padx ='3')
            # Variables Tkinter :
            self.bouton1var = IntVar()
            self.bouton2var = IntVar()
            self.actMusi = IntVar()    
            # Partie "déroulante" du menu :
            self.mo = Menu(optMenu)
            self.mo.add_command(label = 'Activer :', foreground ='blue')
            self.mo.add_checkbutton(label ='Appli1', command = self.choixActifs,
                                variable =self.bouton1var)
            self.mo.add_checkbutton(label ='Appli2', command = self.choixActifs,
                                variable =self.bouton2var)
            self.mo.add_separator()
     
            # Intégration du menu :
            optMenu.configure(menu = self.mo)
     
        def ChoixActifs
             a1 = self.bouton1var.get()
             a2 = self.bouton2var.get()
             os.system("start Bouton1on.exe" "start Bouton1off.exe")
             os.system("start Bouton2on.exe" "start Bouton2off.exe")
    Voila comme vous le voyez ici c'est n'importe quoi, mais l'idée est la.

    je ne sais pas comment faire. :s

    Si quelqu'un a la solution merci de me donner un coup de pouce !

  2. #2
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Le plus simple, à mon avis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            self.mo.add_checkbutton(label ='Appli1', command = self.choix1,
                                variable =self.bouton1var)
            self.mo.add_checkbutton(label ='Appli2', command = self.choix2,
                                variable =self.bouton2var)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        def choix1(self):
            a1=self.bouton1var.get()
            cmd=a1 and "Bouton1on.exe" or "Bouton1off.exe"
            print Popen(["echo",cmd],shell=True, stdout=PIPE).communicate()[0]
     
        def choix2(self):
            a2=self.bouton2var.get()
            cmd=a2 and "Bouton2on.exe" or "Bouton2off.exe"
            print Popen(["echo",cmd],shell=True, stdout=PIPE).communicate()[0]
    Voir le module subprocess.

  3. #3
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    Merci pour votre réponse Pierjean !


    Citation Envoyé par pierjean Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        def choix1(self):
            a1=self.bouton1var.get()
            cmd=a1 and "Bouton1on.exe" or "Bouton1off.exe"
            print Popen(["echo",cmd],shell=True, stdout=PIPE).communicate()[0]
     
        def choix2(self):
            a2=self.bouton2var.get()
            cmd=a2 and "Bouton2on.exe" or "Bouton2off.exe"
            print Popen(["echo",cmd],shell=True, stdout=PIPE).communicate()[0]
    Oui, ca a l'air d'être quelque chose comme ca, mais la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print Popen(["echo",cmd],shell=True, stdout=PIPE).communicate()[0]
    pose problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NameError: global name 'PIPE' is not defined
    lorsque l'on clique sur le bouton.

    Si je retire largument "stdout=PIPE" (pour voir )
    j'en retire une autre erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeError: popen() takes no keyword arguments
    effectivement il faudrais mieux connaître subprocess, mais étant débutant la doc est vraiment osbcure

    J'essaie de me débrouiller en anglais mais pour ca si il existe une documentation française je suis preneur

    Ah petit oubli de ma part je suis sous Windows (Xp Home)
    Cela pourrais avoir son importance !

    Auriez vous une solution ?

    EDIT : J'ai réussi grâce a votre code initial et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        # Bouton Appli1
        def choix1(self):
            a1=self.bouton1var.get()
            cmd=a1 and "Bouton1on.exe" or "Bouton1off.exe"
            print system(cmd)

    Voila maintenant il va falloir que j'essaie de créer un système de sauvegarde pour savoir quelles options sont cochées ou pas et restituer cela au démarrage de mon interface.
    Il faudrais que j'enregistre ces valeurs dans un fichier txt ou
    dans la base et registre et pouvoir les lire au début du programme.

  4. #4
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError: global name 'PIPE' is not defined
    C'est parce qu'il faut utiliser la classe Popen du module subprocess.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from subprocess import *
    Il faudrais que j'enregistre ces valeurs dans un fichier txt ou
    dans la base et registre et pouvoir les lire au début du programme.
    Je te conseille ConfigParser. Voir la FAQ

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    Bonjour,

    j'aurais du le trouver ça quand même...

    Merci du conseil, je vais me renseigner.

    Une dernière chose, ya t'il moyen de créer un contrôle de flux lors de l'appui sur un bouton? Cela me permettrais par la suite de traduire certains de mes scripts en python au lieu de les appeler.
    Je pense qu'il doit (forcément) y en avoir un a cette ligne mais je ne la comprends pas bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            a1=self.bouton1var.get()
            cmd=a1 and "Bouton1on.exe" or "Bouton1off.exe"
    EDIT : Je viens de résoudre ce petit problème, maintenant c'est plus clair !

    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
     
     
    #Création du bouton :
     
            self.variable = IntVar()
            self.mo.add_checkbutton(label ='NomDuBouton',
                                command = self.maMethode,
                                variable =self.variable)
     
    #####################################
     
    #Définition des commandes on/off du bouton
        def maMethode(self):
            #Code exécuté lors du clic quelque soit l'état
            if self.variable.get():
                #Code si le bouton est coché
            else:
                #Code si le bouton est décoché
    a la ligne "if self.variable.get():" on teste "variable", elle renvoie "quelquechose" (vrai) si elle est cochée ou 0 (faux) si elle ne l'est pas.

    Voila, bon pour le sujet de la discussion avec ça je pense que c'est archi-résolu ! ^^

    J'espère que cela pourra aider

    Merci Encore Pierjean !

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

Discussions similaires

  1. [DOS]Lancer un executable en tache de fond
    Par raptor70 dans le forum Windows
    Réponses: 1
    Dernier message: 27/10/2005, 13h54
  2. Lancer l'exécution d'un autre programme
    Par Neitsa dans le forum Linux
    Réponses: 3
    Dernier message: 21/05/2005, 23h39
  3. Réponses: 5
    Dernier message: 15/07/2004, 23h28
  4. Réponses: 2
    Dernier message: 22/04/2004, 13h28
  5. Lancer un executable à partir d'un exe
    Par Invité dans le forum MFC
    Réponses: 4
    Dernier message: 26/01/2004, 12h55

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