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 :

A partir d'un menu Tkinter Lancer un script python [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut A partir d'un menu Tkinter Lancer un script python
    Bonjour � tous,

    Je r�alise une interface pour ma BdD de citations (Auteurs, Citations...)
    Je souhaite lancer au moyen d'un menu Tkinter un script python qui ouvrira une nouvelle fen�tre avec les champ de saisie pour enregistrer les auteurs.

    Mes fichiers :
    frontend.py pour mon interface graphique.
    frontend_auteur.py pour la saisie des Auteurs
    main.py pour les instruction d'�criture dans ma BdD.

    Et je n'arrive pas � lancer le script "frontend_auteur.py"

    J'ai le message suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Running] python -u "c:\DevPython_Santiago\menesis_database_projet-02\frontend.py"
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Users\charlelie\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
      File "c:\DevPython_Santiago\menesis_database_projet-02\frontend.py", line 9, in runauteur
        run1 = subprocess.run(["start python frontend_auteur.py"])
    NameError: name 'subprocess' is not defined
    
    

    Voici donc mes fichiers :

    frontend.py
    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
    65
    66
    67
    68
     
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    from main import*   # syntaxe pour appeller un autre fichier py + fonction
    from tkinter import font
    from subprocess import*# Module permettant de lancer des programmes "Run"
     
    defrunauteur (): 
        run1 = subprocess.run(["start python frontend_auteur.py"])
     
     
    #================== Création du constructeur graphique =================================
    fenetre_pce =Tk() # Création d'un constructeur
     
    #======== Dimensionnement de la fenetre_pce =================================================
    # Fonction centrer fenêtre
    screen_x =int(fenetre_pce.winfo_screenwidth())
    screen_y =int(fenetre_pce.winfo_screenheight())
     
    #fenetre_pce_x = 1600
    #fenetre_pce_y = 900
     
    fenetre_pce_x =1260
    fenetre_pce_y =720
     
    pos_x = (screen_x //2) - (fenetre_pce_x //2)
    pos_y = (screen_y //2) - (fenetre_pce_y //2)
     
    # Attention le 1er facteur est x ensuite +
    geo ="{}x{}+{}+{}".format(fenetre_pce_x, fenetre_pce_y, pos_x, pos_y)
    fenetre_pce.geometry(geo)
    fenetre_pce.resizable(width=False,height=False) # Fenêtre modifiable True or False
     
     
    #============= FENETRE FIN ==============================================================
    fenetre_pce.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    #=================== Création d'un menu =================================================
    menubar = Menu(fenetre_pce,borderwidth=20, relief=GROOVE) # Création de la FRAME pour placer les menus dans le constructeur  ==> fenetre =Tk() # Création d'un constructeur
     
    menuFichier = Menu(menubar, tearoff=0) # Création du menu "Fichier"
    menubar.add_cascade(label="Fichier", menu=menuFichier) # Rattachement des commandes au menu "Fichier"
    menuFichier.add_command(label="Créer")
    menuFichier.add_command(label="Ouvrir",)
    menuFichier.add_command(label="Editer")
    menuFichier.add_separator() # Ligne de séparation
    menuFichier.add_command(label="Quitter", command=fenetre_pce.quit)
     
    menuEdition = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Edition", menu=menuEdition)
    menuEdition.add_command(label="Couper")
    menuEdition.add_command(label="Copier")
    menuEdition.add_command(label="Coller")
    menuEdition.add_command(label="Créer")
     
    menuAuteur = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Auteur", menu=menuAuteur)
    menuAuteur.add_command(label="Créer", command=runauteur)
     
     
    menuAide = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Aide", menu=menuAide)
    menuAide.add_command(label="A propos") 
     
    #================== FERMETURE DES BOUCLES ==============================================
    fenetre_pce.config(menu=menubar) # Configuration et print menu
    fenetre_pce.mainloop() # Boucle principale
    frontend_auteur.py
    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
     
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    from main import*# syntaxe pour appeller un autre fichier py + fonction
    from tkinter import font
     
    #================== Création du constructeur graphique =================================
    fenetre_pce =Tk() # Création d'un constructeur
     
    #======== Dimensionnement de la fenetre_pce =================================================
    # Fonction centrer fenêtre
    screen_x =int(fenetre_pce.winfo_screenwidth())
    screen_y =int(fenetre_pce.winfo_screenheight())
     
     
    fenetre_pce_x =800
    fenetre_pce_y =600
     
    pos_x = (screen_x //2) - (fenetre_pce_x //2)
    pos_y = (screen_y //2) - (fenetre_pce_y //2)
     
    # Attention le 1er facteur est x ensuite +
    geo ="{}x{}+{}+{}".format(fenetre_pce_x, fenetre_pce_y, pos_x, pos_y)
    fenetre_pce.geometry(geo)
    fenetre_pce.resizable(width=False,height=False) # Fenêtre modifiable True or False
     
    #============= FENETRE FIN ==============================================================
    fenetre_pce.iconbitmap("img/search.ico") ### Changement de l'icone de la fenêtre [l'icone doit être placé dans le répertoire racine de l'application ou un autre répertoire img/...]
     
    # Champs de saisie ========================
     
    labelAuteur = Label(fenetre_pce, text="Auteur", font=("Arial", 12,"bold"))
    labelAuteur.place(x=30,y=38)
     
    entreeAuteur = Entry (fenetre_pce, width="50",font=("Arial", 12,"bold"))
    entreeAuteur.place(x=30,y=65)
     
     
    labelInfo = Label(fenetre_pce, text="Information", font=("Arial", 12,"bold"))
    labelInfo.place(x=30,y=100)
     
    entreeInfo = Text(fenetre_pce, width="90", height="10")
    entreeInfo.place(x=30,y=127)
     
    #####
    # Vous devez transmettre à la fonction Text.get() un index de début et de fin indiquant la partie du texte que vous souhaitez Text.get() dans le widget Text .
    #####
     
    boutonEnregistrer = Button(fenetre_pce, text='Enregistrer', command=lambda : enregister(entreeAuteur.get(), entreeInfo.get('1.0', END)))  
    boutonEnregistrer.place(x=700,y=400)
     
    #================== FERMETURE DES BOUCLES ==============================================
     
    fenetre_pce.mainloop() # Boucle principale
    main.py

    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
     
    # -*- coding: utf-8 -*-
    import sqlite3
     
    #=================== Insertion des données dans database ================================================
    defenregister(auteur_auteur, auteur_info):
     
    try:    
                connection = sqlite3.connect('mnesis.db') # Connection à la BdD
                cursor = connection.cursor() # création du curseur
                new_auteur = (cursor.lastrowid, auteur_auteur, auteur_info) # Récupération des valeurs des boutons
                cursor.execute('INSERTINTO tb_auteur VALUES(?,?,?)',new_auteur) # les (?,?,?) représentent les valeurs qui sont renseignées dans la variable new_auteur 
     
    exceptExceptionas e:
    print("ERREUR",e)
                connection.rollback()
    finally:
                cursor.close()
                connection.commit() # Valider l'enregistrement dans la database
                connection.close() ## Fermeture de la connection
    merci beaucoup par avance pour votre aide.

  2. #2
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut


    Pour ex�cuter un autre module � partir du module actif, je dois �crire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    from subprocess import run
     
    run("python Tests/serge_tahe/sort_tuple.py")
    Voir : https://docs.python.org/fr/3/library/subprocess.html

    V�rifier vos codes, dans frondend.py je vois :

    from subprocess import*# Module permettant de lancer des programmes "Run" Il manque un espace entre * et le commentaire.

    subprocess.run(["start python frontend_auteur.py"]) l'inclusion du mot 'start' me semble bizarre et il manque le chemin vers le fichier et subprocess est d�j� import� !

    J'essaierai avec le code run(args=["python chemin/frontend_auteur.py"]).

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Si vous �crivez une application tkinter vous devez g�rer toutes vos "fen�tres" depuis le m�me processus.

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

  4. #4
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut A partir d'un menu Tkinter Lancer un script python
    @R�dacteur

    Un grand merci et j'ai lu le lien que vous m'avez donn�, mais je ne comprends pas tout.
    J'ai choisi le langage Python parce qu'il est tr�s logique, mais l� je m'aper�ois que c'est tr�s compliqu� pour faire quelque chose de simple.

    Alors je vous donne plus d��l�ments pour mieux appr�hender ma difficult� :

    Je suis Windows 10
    J'ai install� Anaconda et j'utilise dans Anaconda VS Code 1.38.1, mais j'avais au pr�alable install� Pycharm
    ET donc C:\Users\charlelie\PycharmProjects\DevPythonPycharm\venv\Scripts\python.exe

    Donc mon Python a �t� install� avec Pycharm d'apr�s ce que je comprends.

    Mon dossier de d�veloppement se trouve : C:\DevPython\menesis_database_projet-02

    Help... je fais comment ? Est-ce que je d�sinstalle Pycharm et Anaconda et que je r�installe Anaconda avec python ?

  5. #5
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut Prcessus Tkinter
    @wiztricks


    Citation Envoy� par wiztricks Voir le message
    Salut,

    Si vous �crivez une application tkinter vous devez g�rer toutes vos "fen�tres" depuis le m�me processus.

    - W
    Merci pour votre retour, mais qu'entendez-vous exactement par cela ?

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 774
    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 774
    Par d�faut
    Citation Envoy� par lagratteCchouette Voir le message
    Merci pour votre retour, mais qu'entendez-vous exactement par cela ?
    Qu''il semble que vous utilisiez subprocess par incompr�hension des possibilit�s offertes par tkinter...

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

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Salut,

    Dans d'autres langages on trouve aussi des �quivalents � ce fameux "subprocess" mais cela me semble �trange de l'utiliser pour ouvrir une autre fen�tre... Est-ce propre � Python de faire ce genre de chose ? Cela ne fait pas parti des usages que j'ai pu voir comme par exemple ex�cuter une application ou un programme �crit dans un autre langage...

    Mais l� tu as le source et il est en Python alors ce ne serait pas plus logique de faire une application multi-fen�tres, une fen�tre parent/principale et des fen�tres enfants (ouvertes depuis la fen�tre parent) ?

    Je ne connais pas bien tkinter (je d�bute) mais cela doit �tre possible de faire une application multi-fen�tres avec, en tous cas � ta place je chercherais d'abord dans ce sens et si c'est pas possible eh ben on essai autre chose...


    PS : Il y a des erreurs dans les codes, non ? Il manque des espaces exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    defrunauteur (): 
        run1 = subprocess.run(["start python frontend_auteur.py"])
    Ce ne serait pas plut�t "def runauteur" ?

    Il y en d'autres des comme �a ...

    - Il manque aussi des indentations ici et l�...
    exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    exceptExceptionas e:
    print("ERREUR",e)
                connection.rollback()

  8. #8
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 774
    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 774
    Par d�faut
    Citation Envoy� par Beginner. Voir le message
    ce fameux "subprocess" mais cela me semble �trange de l'utiliser pour ouvrir une autre fen�tre... Est-ce propre � Python de faire ce genre de chose ?
    C'est pas un sujet Python mais un sujet tkinter avec lequel on peut cr�er une fen�tre secondaire via Toplevel.

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

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ok merci. Ainsi donc si on peut "cr�er" des fen�tres secondaires (ce qui me fait penser aux fen�tres enfants ou boites de dialogue qu'on voit ailleurs) alors c'est ce que j'utiliserais plut�t que d'utiliser "subprocess"...

  10. #10
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut Pr�cisions
    Merci, je vais chercher dans ce sens et je teste et je reviens sur la discussion.

  11. #11
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut Tkinter Toplevel
    Bonjour et un grand merci, car m�me si j'ai eu du mal � ma faire comprendre c'est bien cela que je voulais => un Toplevel
    Voici 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
    defrunauteur():
        toplevelAuteur = Toplevel()  #== Contructeur Toplevel ==
        toplevelAuteur.title(" Bienvenue dans la saisie des auteurs")
        screen_x =int(toplevelAuteur.winfo_screenwidth())
        screen_y =int(toplevelAuteur.winfo_screenheight())
        toplevelAuteur_x =800
        toplevelAuteur_y =600
        pos_x = (screen_x //2) - (toplevelAuteur_x //2)
        pos_y = (screen_y //2) - (toplevelAuteur_y //2)
        geo ="{}x{}+{}+{}".format(toplevelAuteur_x, toplevelAuteur_y, pos_x, pos_y)
        toplevelAuteur.geometry(geo)
        toplevelAuteur.resizable(width=False,height=False) # Fenêtre modifiable True or False
        labelAuteur = Label(toplevelAuteur, text="Auteur", font=("Arial", 12,"bold"))
        labelAuteur.place(x=30,y=38)
        entreeAuteur = Entry (toplevelAuteur, width="50",font=("Arial", 12,"bold"))
        entreeAuteur.place(x=30,y=65)
        labelInfo = Label(toplevelAuteur, text="Information", font=("Arial", 12,"bold"))
        labelInfo.place(x=30,y=100)
        entreeInfo = Text(toplevelAuteur, width="90", height="10")
        entreeInfo.place(x=30,y=127)
        boutonEnregistrer = Button(toplevelAuteur, text='Enregistrer', command=lambda : enregister(entreeAuteur.get(), entreeInfo.get('1.0', END)))  
        boutonEnregistrer.place(x=700,y=400)
    Merci encore

  12. #12
    Membre confirm� Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    202
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 202
    Par d�faut
    Citation Envoy� par lagratteCchouette Voir le message
    @R�dacteur

    Un grand merci et j'ai lu le lien que vous m'avez donn�, mais je ne comprends pas tout.
    J'ai choisi le langage Python parce qu'il est tr�s logique, mais l� je m'aper�ois que c'est tr�s compliqu� pour faire quelque chose de simple.

    Alors je vous donne plus d��l�ments pour mieux appr�hender ma difficult� :

    Je suis Windows 10
    J'ai install� Anaconda et j'utilise dans Anaconda VS Code 1.38.1, mais j'avais au pr�alable install� Pycharm
    ET donc C:\Users\xxxxxxx\PycharmProjects\DevPythonPycharm\venv\Scripts\python.exe

    Donc mon Python a �t� install� avec Pycharm d'apr�s ce que je comprends.

    Mon dossier de d�veloppement se trouve : C:\DevPython\menesis_database_projet-02

    Help... je fais comment ? Est-ce que je d�sinstalle Pycharm et Anaconda et que je r�installe Anaconda avec python ?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Lancer un script python en t�che planifi�e
    Par Leniouns dans le forum G�n�ral Python
    R�ponses: 13
    Dernier message: 17/07/2012, 17h02
  2. SWIG probleme pour lancer le script python dans mon code C++ et r�cup�rer un objet
    Par spartan811 dans le forum Interfa�age autre langage
    R�ponses: 3
    Dernier message: 11/05/2012, 16h23
  3. Lancer un script python avec argument depuis shell
    Par tidusff10 dans le forum G�n�ral Python
    R�ponses: 1
    Dernier message: 30/03/2012, 12h44
  4. R�ponses: 8
    Dernier message: 30/09/2009, 18h25
  5. [Syst�me] Lancer un script python en PHP
    Par gannher dans le forum Langage
    R�ponses: 10
    Dernier message: 13/09/2007, 11h24

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