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 :

créer exe puis ouvrir avec


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut créer exe puis ouvrir avec
    Bonjour,

    J'arrive avec cx_freeze à transformer ce code ci-dessous .py en executable .exe.

    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
    import tkinter as tk
    import tkinter.filedialog as tkFD
     
    def open_file():
        name = tkFD.askopenfilename(filetypes = [("Fichiers Tex","*.tex")])
        if name:
            with open(name, "r") as f:
                t.insert(tk.INSERT, f.read())
        t.update()
     
    root = tk.Tk()
    f = tk.Frame(root)
    geoargs = {'fill':'both', 'padx':5, 'pady':5}
    f.pack(side=tk.BOTTOM, **geoargs)
    tk.Button(f, text='Open File', command=open_file).pack(side=tk.LEFT, **geoargs)
    tk.Button(f, text='Quit', command=root.quit).pack(side=tk.RIGHT, **geoargs)
    xscrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
    xscrollbar.pack(side=tk.BOTTOM, fill=tk.X)
    yscrollbar = tk.Scrollbar(root)
    yscrollbar.pack(side=tk.RIGHT, fill=tk.Y)
    t = tk.Text(root, wrap=tk.NONE, xscrollcommand=xscrollbar.set,
                yscrollcommand=yscrollbar.set)
    t.pack()
    xscrollbar.config(command=t.xview)
    yscrollbar.config(command=t.yview)
    t.focus_set()
    root.mainloop()
    Je pensais que je devais passer par cette procédure pour pouvoir accéder au <<ouvrir avec>> de windows pour ouvrir directement les fichiers d'extension .tex (cf code ci dessus).

    En fait, avec <<ouvrir avec>>, il ouvre l'application mais il n'ouvre pas le fichier. Que faut-il rajouter (au code?) pour faire fonctionner le <<ouvrir avec>>.

    Merci pour vos réponses.

    Gabriel

    PS: dans le setup.py j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from cx_Freeze import setup, Executable
     
    setup(
    	name = "essai_code",
    	version = "1.0",
    	description = "Edit essai",
    	executables = [Executable(r"c:\gabriel\gabytex\essai_code.py")]
    )

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    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
    import tkinter as tk
    import tkinter.filedialog as tkFD
    import sys
    import os
     
    def open_file():
        name = tkFD.askopenfilename(filetypes = [("Fichiers Tex","*.tex")])
        if name:
            with open(name, "r") as f:
                t.insert(tk.INSERT, f.read())
        t.update()
     
    def open_onstart(fichier):
        print(fichier)
     
    root = tk.Tk()
    f = tk.Frame(root)
    geoargs = {'fill':'both', 'padx':5, 'pady':5}
    f.pack(side=tk.BOTTOM, **geoargs)
    tk.Button(f, text='Open File', command=open_file).pack(side=tk.LEFT, **geoargs)
    tk.Button(f, text='Quit', command=root.quit).pack(side=tk.RIGHT, **geoargs)
    xscrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
    xscrollbar.pack(side=tk.BOTTOM, fill=tk.X)
    yscrollbar = tk.Scrollbar(root)
    yscrollbar.pack(side=tk.RIGHT, fill=tk.Y)
    t = tk.Text(root, wrap=tk.NONE, xscrollcommand=xscrollbar.set,
                yscrollcommand=yscrollbar.set)
    t.pack()
    xscrollbar.config(command=t.xview)
    yscrollbar.config(command=t.yview)
    t.focus_set()
    if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]):
        with open(sys.argv[1], "r") as f:
            t.insert(tk.INSERT, f.read())
        t.update()
    root.mainloop()
    A vous de voir ce que retourne sys.argv et de lire la doc d'os.path.

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    Bonsoir,

    J'ai donc insérer les lignes manquantes et çà fonctionne.

    Il reste cependant un problème (dont j'ai cherché les réponses sur le forum). Lorsque je sélectionne plusieurs fichiers, il m'ouvre autant de console et d'instance. Or dans mon instance, j'ai créé un notebook avec des onglets. Serait-il possible d'adapter le code pour que s'il y a plusieurs fichiers à ouvrir, il ouvre à chaque fois un onglet et non pas une instance?

    Merci pour vos réponses.

    Gabriel

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Ce n'est pas dans le code cela...

    sys.argv retourne une liste et là c'est le traitement des listes qu'il vas falloir revoir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for fichier in sys.argv[1:]:
        if os.path.isfile(fichier):
            ouvrir un onglet
            le remplir.
    @+

    Edit: Après cela dépend du système. Il est toujours possible de n'ouvrir qu'une seule fois le programme et que s'il est ré-ouvert les nouvelles instances du programme lui retourne le fichier a ouvrir.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    Bonjour,

    En fait je voudrais surtout que lorsque le programme est ouvert, de ne plus le réouvrir pour des nouveaux fichiers et que si je clique (pas forcément simultanément) le fichier cliqué s'insère directement dans un nouvel onglet du programme ouvert.

    Je pense que cela correspond à la remarque que pausekawa m'a faite:
    Il est toujours possible de n'ouvrir qu'une seule fois le programme et que s'il est ré-ouvert les nouvelles instances du programme lui retourne le fichier à ouvrir.
    Mais, je ne vois vraiment pas comment faire.

    Merci pour vos réponses.
    Gabriel

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 750
    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 750
    Par défaut
    Salut,
    Mais, je ne vois vraiment pas comment faire.
    Ce n'est pas "trivial".
    1 - il faut créer un objet système genre mutex pour que les instances suivantes "voient" si l'application a été ou pas démarrée,
    2 - le cas échéant, plutôt que de démarrer l'application, il faudra expédier un message à l'application démarrée pour qu'elle récupère le fichier à intégrer dans les fichiers "ouverts".
    Pour 1: voir la discussion.
    Pour 2: le plus simple serait sans doute de passer par un client RPC. Mais ce n'est qu'un avis.
    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Créer .exe avec Launch4j
    Par dammex dans le forum NetBeans
    Réponses: 7
    Dernier message: 26/10/2010, 23h50
  2. Réponses: 3
    Dernier message: 28/04/2009, 19h12
  3. Créer une dll enregistrable avec c:\WINDOWS\system32\regsvr32.exe
    Par Immobilis dans le forum Général Dotnet
    Réponses: 13
    Dernier message: 09/03/2009, 21h37
  4. VBScript : Créer puis ouvrir un fichier csv
    Par Stephbzh dans le forum VBScript
    Réponses: 1
    Dernier message: 04/06/2008, 09h36
  5. Réponses: 7
    Dernier message: 04/01/2007, 22h31

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