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 :

[Tkinter] amélioration app : asksaveasfilename/askopenfilename


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Jardinier
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Jardinier
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Tkinter] amélioration app : asksaveasfilename/askopenfilename
    Bonjour à tous,

    Tout d'abord, étant nouvellement inscrit, je vous demande de m'excuser si une présentation était à faire, je n'ai pas vu la discution qui s'y rapportait !
    Ayant de nouveaux projets d'ordre associatif et potentiellement professionnels, je me remets à la programmation (j'ai suivi des cours de POO en Pascal (Delphi) et Java (NetBeans) à la fac, et j'en profite pour découvrir Python.

    Je viens de développer une petite application de saisie dans un fichier de type tableur dont voila l'interface Tkinter :


    > Le bouton 'Choisir' permet de choisir le fichier sur lequel on travaille (et qui est précisé dans le label à sa gauche)
    > Le bouton 'Entrée' permet d'enregistrer le champ dans l'Entry dans une liste
    > Le bouton 'Terminer' enregistre la liste dans le fichier et 'libère' le bouton Choisir pour éventuellement travailler sur un nouveau fichier.

    Mon premier problème survient lors de la sélection du fichier sur lequel travailler. Après lecture des différentes ressources sur les boites de dialogues, j'identifie les fonctions asksaveas... et askopen... de la sous libraire filedialog. Le problème de la première (asksaveas) est qu'il m'est impossible de travailler sur un fichier existant ('file already exists, do you wont to overwrite it ?') et la deuxième (askopen) ne permet pas de travailler sur un nouveau fichier !
    J'ai contourner le problème en faisant intervenir une messagebox (de type question) : Le fichier existe-t-il déjà ? Oui --> askopenfilename, Non --> asksaveasfilename.


    Mais, c'est un peu moins agréable !
    Une idée pour contourner ce désagrément ?

    Deuxièmement : l'application est destinée à terme à saisir dans un fichier tableur (.xls, .ods). La version "bêta" fonctionne avec le module pickle. J'ai fait des test avec la librairie 'csv' pour écrire des fichiers de même type qui semble bien fonctionner pour OpenOffice (écriture d'un fichier avec trois entrées dans la première ligne, qui s'ouvre correctement). Savez-vous si ca fonctionne également bien avec Excel ? Je n'ai pas vraiment vu de problèmes particuliesr remonter sur les fils de discussions, mais certains utilisent les librairies xlrd, xlwt, xlutils, etc.
    Quels sont vos avis ?

    Merci pour votre aide, à très bientôt,

    Mart

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avez-vous déjà lu ceci : http://tkinter.unpythonic.net/wiki/tkFileDialog

    @+.
    Dernière modification par Invité ; 12/06/2014 à 22h59.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Jardinier
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Jardinier
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de ta réponse.
    Citation Envoyé par tarball69 Voir le message
    Oui, j'avais pris connaissance de ce module, que j'utilise d'ailleurs.
    En fait, mon code n'a besoin que d'identifier un nom de fichier, la lecture/ecriture se fait plus tard.
    Le 'problème' (l'amélioration que je souhaiterais apporter) souligné dans mon post initial, c'est que quand je veux travailler sur un nouveau fichier, je dois utiliser asksaveasfilename, mais si le fichier existe déjà (par exemple, si je souhaite compléter une saisie déjà effectuée), ca ne fonctionne pas et je dois utiliser askopenfilename.
    D'où l'implémentation d'une dialogbox type question, pour savoir si oui ou non le fichier existe et faire intervenir la bonne fonction du module décrit dans ton lien.

    Mais, je trouve cela un peu dommage d'avoir des fenêtres qui s'ouvrent et je me demande si il y a un moyen pour contourner cela.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Le problème de la première (asksaveas) est qu'il m'est impossible de travailler sur un fichier existant ('file already exists, do you wont to overwrite it ?') et la deuxième (askopen) ne permet pas de travailler sur un nouveau fichier !
    Je ne vois pas trop où est le problème.

    Tu as trois cas de figure.
    • Tu crées de nouvelles données, tu n'as donc que le choix Sauver sous.
    • Tu veux travailler sur des données existantes, tu ouvres le fichier avec askopenfilename, tu lis les données, tu fermes le fichier, tu gardes référence du nom de fichier.
    • Tu as le choix entre Sauver avec le nom de fichier déjà connu et Sauver sous avec asksaveasfilename, cette dernière boîte de dialogue demandera toujours si tu veux écraser un fichier existant, ce qui est normal, si elle ne le faisait pas tu devrais l'implémenter dans ton 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
     
    def get_filename(save=False):
        if save:
            options = {voir: http://tkinter.unpythonic.net/wiki/tkFileDialog}
            return tkFileDialog.asksaveasfilename(**options)
     
        options = {voir: http://tkinter.unpythonic.net/wiki/tkFileDialog}
        return tkFileDialog.askopenfilename(**options)
     
    filename = None
    if cas de figure 1:
        filename = get_filename(True)
        if filename:
            with open(filename, 'w') as outf:
                ... écriture des données
     
    elif cas de figure 2:
        filename = get_filename()
        if filename:
            with open(filename, 'r') as inf:
                ... lecture des données
     
    elif cas de figure 3:
        if sauver sous:
            cas de figure 1()
     
        elif filename:
            # filename est déjà connu
            with open(filename, 'w') as outf:
                ... écriture des données

    Edit: J'oublie une chose, lorsque tu recrées une nouvelle feuille de données, pense à remettre filename = None pour se prémunir de distraction.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Jardinier
    Inscrit en
    Juin 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Jardinier
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juin 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour VinsS,

    Merci pour ta réponse.
    En fait, je trouvais dommage de faire intervenir une question (l'expérience d'utilisation se retrouve un peu entâchée - sorte de distraction dans la saisie !) et je me disais que j'étais peut-être passé à côté d'un module et/ou d'une astuce.
    Après, nous ne sommes pas devin, alors savoir avant lui ce que l'utilisateur souhaite faire... Affaire classée !

    Citation Envoyé par VinsS Voir le message
    Salut,
    Edit: J'oublie une chose, lorsque tu recrées une nouvelle feuille de données, pense à remettre filename = None pour se prémunir de distraction.
    Merci pour cette astuce ! On est jamais à l'abrit de travailler sur de mauvaises infos, en effet !

    A bientôt,

    Mart

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

Discussions similaires

  1. [Kylix] deployer une app. kylix3... PROBLEME!
    Par le_barbu dans le forum EDI
    Réponses: 2
    Dernier message: 16/12/2003, 20h53
  2. Créer un app Multimedia en reseaux
    Par kaygee dans le forum Développement
    Réponses: 3
    Dernier message: 17/11/2003, 15h47
  3. [Win32]App multithread
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 25/09/2003, 09h57
  4. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07

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