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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lagratteCchouette
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    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 : 74
    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 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,

    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
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    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
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    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 ?

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 197
    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 ?

  7. #7
    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
    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

  8. #8
    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()

+ 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