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 :

démarrer un programme python avec un fichier de config


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut démarrer un programme python avec un fichier de config
    Bonjour,

    je viens de faire un tkinter pour choisir l'imprimante et lancer une impression et j'aimerai avoir la possibilité de garder l'imprimante sélectionnée lors du prochain lancement de ce programme.

    J'imagine qu'il y a peut être la possibilité de créer un fichier config.txt et que le programme devrait pouvoir y lire dedans est ce que je suis sur la bonne piste ou est ce qu'il y a mieux à faire ?

    mon prog est là :
    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
    import win32print
    import win32api
    from tkinter import filedialog, Listbox, Tk, ttk, N, S, W, E, StringVar, Button
    import tkinter as tk
     
    Imprimante = []
     
    global selected_printer
     
     
    def choix_imprime(event):
        global selected_printer
        selected_indice = lbl.curselection()
        selected_printer = ",".join([lbl.get(i) for i in selected_indice])
        selected_printer = '"' + selected_printer + '"'
        Texte.set(selected_printer)
     
     
    def imprime():
        FILE_PATH = 'c:\\dfi_5012\\pdf'
        fichier = filedialog.askopenfilename(initialdir=FILE_PATH)
        fichier = '"' + fichier + '"'
        win32api.ShellExecute(0, "printto", fichier, selected_printer, None, 0)
     
     
    for (Flags, pDescription, pNameL, pComment) in list(
            win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)):
        Imprimante.append(pNameL)
    for (Flags, pDescription, pNameR, pComment) in list(
                win32print.EnumPrinters(
                    win32print.PRINTER_ENUM_CONNECTIONS, None, 1)):
        Imprimante.append(pNameR)
    imprim = Tk()
    Texte = StringVar()
    imprim.title("Choix de l'imprimante")
    mainframe = ttk.Frame(imprim, padding="3 3 12 12")
    mainframe.grid(column=0, row=0, sticky=(N, S, W, E))
    mainframe.columnconfigure(0, weight=1)
    mainframe.rowconfigure(0, weight=1)
     
    labl = ttk.Label(mainframe, text="Choix de l'imprimante")
    labl.grid(column=0, row=0, sticky=(W, E))
     
     
    var = tk.Variable(value=Imprimante)
    lbl = Listbox(mainframe, selectmode="BROWSE", listvariable=var)
    lbl.grid(column=0, row=1, sticky=(W, E))
     
    selected_printer = StringVar()
    text = tk.Label(mainframe, textvariable=Texte, width=30)
    text.grid(column=1, row=0, sticky=(W, E))
     
    btn = Button(mainframe, text="Lancer l'impression",
                 command=lambda: imprime())
    btn.grid(column=1, row=1, sticky=(E, W))
    for i in range(0, len(Imprimante)):
        lbl.insert(i, Imprimante[i])
    selected_indice = lbl.curselection()
     
    lbl.bind('<<ListboxSelect>>', choix_imprime)
    imprim.mainloop()

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

    Citation Envoyé par figuedi Voir le message
    je viens de faire un tkinter pour choisir l'imprimante et lancer une impression et j'aimerai avoir la possibilité de garder l'imprimante sélectionnée lors du prochain lancement de ce programme.
    Effectivement, pour être retrouvée lors du prochain lancement, l'information doit être persistante et donc sauvegardée sur disque.
    La bibliothèque standard inclue le module configparser pour faire çà... mais vous pouvez utiliser un fichier texte de votre cru ou un format JSON ou pickle.

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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par figuedi Voir le message
    J'imagine qu'il y a peut être la possibilité de créer un fichier config.txt et que le programme devrait pouvoir y lire dedans est ce que je suis sur la bonne piste ou est ce qu'il y a mieux à faire ?
    Cherche du côté des fichiers ".ini" qui sont faits pour ça.
    La lib "configparser" mentionnée par Wiztricks est dédiée à ce type de fichier.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Ok merci beaucoup, je me disais bien qu'avec mon petit fichier config.txt, on allait encore me dire que j'essayais de réinventer la roue.
    Surtout qu'il m'aurait fallu pleins de petits fichiers ou d'écrire dans un tableau pour retrouver la bonne info au bon endroit.

  5. #5
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Re,

    Le bout de code que j'ai donc rajouté en haut
    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
    import configparser
     
    config = configparser.ConfigParser()
    config.read('C:\\Dfi_5012\\Config\\config.ini')
    Imprimante = []
     
    global selected_printer
     
     
    def init():
        global selected_printer
        selected_printer = config['Default_Printer']['Printer']
        Texte.set(selected_printer)
     
     
    def default_printer():
        config['Default_Printer']['Printer'] = selected_printer
        with open('C:\\Dfi_5012\\Config\\config.ini', 'w') as configfile:
            config.write(configfile)
    Comme ça il va lire l'imprimante par défaut, et il peut également la mettre à jour.

    Merci encore

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par figuedi Voir le message
    config.read('C:\\Dfi_5012\\Config\\config.ini')on allait encore me dire que j'essayais de réinventer la roue.
    config.read(pathlib.Path.home() / "Config" / "config.ini") (en important pathlib)
    Et si "C:\\Dfi_5012" n'est pas ton home, alors config.read(pathlib.Path("c:", "Dfi_5012", "Config", "config.ini")).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Ok merci beaucoup, je me disais bien qu'avec mon petit fichier config.txt, on allait encore me dire que j'essayais de réinventer la roue.
    Là c'est plus embêtant: ces fichiers sont, à priori, modifiables par l'utilisateur avec un simple éditeur de texte. Il est donc préférable d'utiliser une mise en forme connue que d'en inventer une (à documenter). Maintenant, si ce sont des informations qui devront être stockées et ré-utilisées que via le programme (et non modifiables avec un éditeur de texte), pickle peut être plus intéressant.
    note: Windows propose la registry à la place des fichiers .ini et n'est pas facilement modifiable par l'utilisateur.

    - 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. [Python 3.X] Démarrer un programme python avec une combinaison de touches clavier
    Par Math123 dans le forum Général Python
    Réponses: 5
    Dernier message: 19/03/2022, 18h23
  2. [Python 3.X] Ré-démarrer un programme Arduino avec la bibliothèque pyserial de python
    Par Olivier20000 dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 27/05/2020, 19h59
  3. Réponses: 0
    Dernier message: 13/11/2009, 08h34
  4. comment démarrer un programme.win32 avec python
    Par mr maggoo dans le forum Bibliothèques tierces
    Réponses: 4
    Dernier message: 19/12/2006, 10h49

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