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 :

Prob affichage recherche avec Tkinter


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
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Par défaut Prob affichage recherche avec Tkinter
    Bonjour,

    j'ai mis en place un petit script qui permet de faire une recherche sur un mot dans un fichier donné.

    Il me reste deux soucis : premièrement, je voudrais pouvoir dans ma fonction parcourir prendre un dossier complet au lieu d'un seul fichier pour que ma commande puisse faire par exemple : rechercher mot dans *.*

    Mon deuxième souci est l'affichage des résultats. Par une fonction print ça fonctionne mais sur une console alors que le reste de mon script est en graphique. De plus, je cherche a afficher le numéro de ligne.

    Je fais donc appel à votre aide et vous remercie par avance.

    Steph70

    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
    from Tkinter import *
    import tkFileDialog
     
    # definition du fichier a traiter   
    def parcourir(): 
        folder = tkFileDialog.askopenfilename(parent=fen1,initialdir="/",title='Choisissez le fichier ') 
        global nom
        nom = folder
        fen1.bind('<Return>', lire)
     
    # définition du mot a chercher 
    def lire():
        global mot
        mot=ent1.get()
        print mot
        print nom
        search = open(nom,"r")
        for ligne in search:
            if mot in ligne:
                print ligne
        search.close()
     
    #fenêtre principale    
    fen1=Tk()
    text1=Label(fen1, text='Entrer le mot recherché', fg='red')
    text1.grid(column = 0,row=0)
    ent1=Entry(fen1)
    ent1.grid(column=1,row=0)
    text2=Button(fen1, text='Choisisser le dossier ou fichier', command=parcourir)
    text2.grid(column=2,row=0)
    bou2=Button(fen1,text='Lecture',command=lire)
    bou2.grid(column=0,row=2 )
    bou1=Button(fen1, text='Quitter',command=fen1.destroy)
    bou1.grid(column=0,row=3)
     
    #Lancement du programme
    fen1.mainloop()

  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
    Bonsoir,

    Pour les dossiers c'est .askdirectory (tkFileDialog.askdirectory). Regarde dans la doc.
    Regarde du coter d'un Checkbutton pour choisir entre .askdirectory et .askopenfilename par exemple.

    Ton def lire ne concerne qu'un fichier. Regarde du coter d'un if os.path.isdir / else os.path.isfile ou plutôt des Checkbutton pour gérer cela.

    Pour ce qui est du numéro de ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ind = 0
        for ligne in search:
            ind += 1
            if mot in ligne:
                print ind
                print ligne
        # A toi de trouver pour mettre cela en forme.

    Pour des réponses de pros (merci à eux) regarde du coté d'une de mes discussion (C'est pas mes réponses, mais celles des vrais pros )

    Profite en pour regarder comment ouvrir ta liste en graphique.

    Bon courage.

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Par défaut
    Bonjour et merci

    J'ai du changer mon fusil d'épaule car pour lire des fichiers de type docx par exemple ma commande ne fonctionnait pas.

    j'ai donc décidé d'utiliser os.popen mais le resultat ne s'affiche pas.

    Si vous pouviez me donner un coup de main et m'indiquer ou est mon erreur,ca serait vraiment sympa.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    from Tkinter import *
    import tkFileDialog
    import os
     
    # definition du fichier a traiter   
    def parcourir(): 
        folder = tkFileDialog.askopenfilename(parent=fen1,initialdir="/",title='Choisissez le fichier ') 
        global nom
        nom = folder
        fen1.bind('<Return>', lire)
     
    def lire():
        global fichier
        fichier=ent1.get()
        print fichier
        print nom
        a=os.popen("find /I /N" +fichier+ nom)
        a.readlines()
     
    #fenêtre principale    
    fen1=Tk()
    text1=Label(fen1, text='Entrer le mot recherché', fg='red')
    text1.grid(column = 0,row=0)
    ent1=Entry(fen1)
    ent1.grid(column=1,row=0)
    text2=Button(fen1, text='Choisisser le dossier ou fichier', command=parcourir)
    text2.grid(column=2,row=0)
    bou2=Button(fen1,text='Lecture',command=lire)
    bou2.grid(column=0,row=2 )
    bou1=Button(fen1, text='Quitter',command=fen1.destroy)
    bou1.grid(column=0,row=3)
     
    #Lancement du programme
    fen1.mainloop()
    Et le rendu sur le mot toto dans le fichier Repertoire.xls

    toto
    C:/Documents and Settings/moi/Mes documents/Repertoire.xls
    Les variables sont bien affichées mais pas resultat de la recherche. Evidemment, ce mot est bien dans le fichier

    Merci par avance
    Steph70

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Par défaut
    Bon, j'ai avancé un peu.

    j'ai modifier un peu mon script et cette fois la variable récupérer s'affiche.

    Néanmoins, j'ai encore un souci. Lorsque je passe ma commande sur un fichier txt ca fonctionne sans difficulté mais si c'est un fichier doc ou xls, elle me renvoie du vide comme ceci :

    joly #Qui correspond à la variable nom
    C:/Documents and Settings/moi/Mes documents/Sauvegarde_cobian.xls # qui correspond à la variable route
    [] # qui correspond au résultat de la commande
    Alors que sur un fichier texte, ceci me renvoie cela :

    coucou
    C:/test.txt
    ['\n', '---------- C:/TEST.TXT\n', '[1]coucou\n', '[4]coucou\n', '[7]coucou\n', '[10]coucou\n']
    Le problème est que si j'utilise la commande dos à partir de dos et non pas de python elle me renvoie ce qu'il faut que ce soit a partir d'un fichier xls, doc ou autres.

    La je suis un peu perdu.

    Merci d'avance pour votre aide
    Steph70

    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
    from Tkinter import *
    import tkFileDialog
    import os
     
    # definition du fichier a traiter   
    def parcourir(): 
        folder = tkFileDialog.askopenfilename(parent=fen1,initialdir="/",title='Choisissez le fichier ') 
        global route
        route = folder
        fen1.bind('<Return>', lire)
     
    def lire():
        global nom
        nom=ent1.get()
        print nom
        print route
        a=os.popen("find /I /N \""+ nom +"\" "+ route)
        b=a.readlines()
        print b
     
    #fenêtre principale    
    fen1=Tk()
    text1=Label(fen1, text='Entrer le mot recherché', fg='red')
    text1.grid(column = 0,row=0)
    ent1=Entry(fen1)
    ent1.grid(column=1,row=0)
    text2=Button(fen1, text='Choisisser le dossier ou fichier', command=parcourir)
    text2.grid(column=2,row=0)
    bou2=Button(fen1,text='Lecture',command=lire)
    bou2.grid(column=0,row=2 )
    bou1=Button(fen1, text='Quitter',command=fen1.destroy)
    bou1.grid(column=0,row=3)
     
    #Lancement du programme
    fen1.mainloop()

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Par défaut
    Un petit up.

    Pas d'idée ?

    Voici le nouveau script un peu plus complet :
    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
    from Tkinter import *
    import tkFileDialog
    import os
    from ScrolledText import *
     
    # definition du fichier a traiter   
    def parcourir(): 
        folder = tkFileDialog.askopenfilename(parent=fen1,initialdir="/",title='Choisissez le fichier ') 
        global nom
        nom = folder
        fen1.bind('<Return>', lire)
     
    def lire():
        global fichier
        fichier=ent1.get()
        #print fichier
        #print nom
        a=os.popen("find /I /N \""+ fichier +"\" "+ nom)
        b=a.read()
        a.close()
        print b
        texte = ScrolledText(fen1, width = 75, height = 35, font = "Arial 10",
        relief = "groove")
        texte.pack()
        #Ecriture des données
        texte.config(state = NORMAL)    #Permettre l'écriture
        texte.insert("1.0", b)          #Gestion de l'insertin des lignes
                                            #1 = 1ere ligne  0 = 1er caractere de la ligne
        texte.config(state = DISABLED)  #Interdire les modifications
        bou1=Button(fen1, text='Quitter',command=fen1.destroy)
        bou1.pack()
     
    #fenêtre principale    
    fen1=Tk()
    text1=Label(fen1, text='Entrer le mot recherché', fg='red')
    text1.grid(column = 0,row=0)
    ent1=Entry(fen1)
    ent1.grid(column=1,row=0)
    text2=Button(fen1, text='Choisisser le dossier ou fichier', command=parcourir)
    text2.grid(column=2,row=0)
    bou2=Button(fen1,text='Lecture',command=lire)
    bou2.grid(column=0,row=2 )
     
     
    bou1=Button(fen1, text='Quitter',command=fen1.destroy)
    bou1.grid(column=0,row=3)
     
    #Lancement du programme
    fen1.mainloop()
    Amicalement
    Steph70

  6. #6
    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
    Fais démarrer/exécuter et dans la zone tape cmd puis ok.
    Dans la fenêtre tape edit C:/Documents and Settings/moi/Mes documents/Sauvegarde_cobian.xls

    Tu vas comprendre.

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

Discussions similaires

  1. [MySQL] Défaut dans (moteur de recherche avec affichage par page)!
    Par booraq dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/12/2013, 12h10
  2. [XL-2007] affichage message avec fct recherche
    Par toushusss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2011, 13h32
  3. Problème d'affichage recherche avec checkbox
    Par Atchoum89 dans le forum Langage
    Réponses: 12
    Dernier message: 26/07/2011, 11h27
  4. Réponses: 3
    Dernier message: 05/12/2007, 22h19
  5. Réponses: 2
    Dernier message: 27/05/2007, 02h38

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