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 :

listbox.insert ne s'affiche pas ?


Sujet :

Tkinter Python

  1. #1
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut listbox.insert ne s'affiche pas ?
    Bonjour,


    La listbox.insert pour annoncer le traitement ne s'affiche pas dans le canvas ?

    Je ne comprends pas, avez-vous la solution
    Cordialement,



    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #! /usr/bin/python
    #_*_ coding:utf-8 _*_
     
     
    from tkinter import *
    from tkinter.messagebox import * # boîte de dialogue
    from tkinter.commondialog import Dialog
    from PySide import QtGui
    from PySide.QtGui import QApplication
    import os, sys,subprocess
     
     
    class MainWindow(QtGui.QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
     
    * INIT VARIABLE
     
    * CREATION DU RAPPORT
     
    repertoires = windows
     
     
     
    # Fonction de recherche fichier
     
    def recherche():
     
     
        listFic.insert(END,"Traitement en cours ....") -----------------> NE S'AFFICHE PAS au lancement
     
        FOR ............. PARTIE DU CODE SI TROUVE
     
                          en fin de traitement la liste box s'affiche avec celle qui n'est pas afficher au dépard
     
        # Si pas trouvé insert non trouvé
         partie du code si recherche négative
     
     
    def rapport():
        # Ouverture du rapport dans bloc note    
        xfic = ("Rapport_find.txt")
        subprocess.call(['notepad.exe',xfic],shell=True)
     
    # ####################
    # programme principal
    # ####################
     
     
     
    # Fenetre principale        
    fenetre = Tk()
    fenetre.title("Recherche ")  
    fenetre.geometry('900x220+200+300')
    # Fenetre secondaire
    fen_canvas = Canvas(fenetre,bg='white',borderwidth=4,relief=RIDGE,height=400,width=450)
    fen_canvas.pack(side=LEFT)
    # Scrolling fenetre secondaire
    scrollbar = Scrollbar(fen_canvas,bg='blue',orient=VERTICAL)
    scrollbar.pack( side = RIGHT, fill=Y )
    listFic = Listbox(fen_canvas,background = 'ghost white', yscrollcommand = scrollbar.set )
    listFic.pack( side = LEFT, fill = BOTH, ipadx=260, ipady=100, padx=30, pady=50 )
    scrollbar.config( command = listFic.yview )
    # Label et Zone de saisie
    LabelTxt = Label(fenetre,text=" Nom du fichier à rechercher ",bg="Silver",relief="groove",borderwidth=3) 
    search=StringVar()
    Saisie = Entry(fenetre,width=40, relief="groove", bd=5, bg="white", textvariable=search)
    LabelTxt.pack(expand=True)
    Saisie.pack(expand=True)
    # Photo insérée dans fenetre principale
    photo=PhotoImage(file="2014-06-02_192814.gif")
    pagegarde = Label(fenetre, image=photo)
    pagegarde.pack(expand=True)
    # Bouton
     
    validation = Button(fenetre,text='Validation',fg='black',command = recherche, relief="groove",borderwidth=5).pack(side=RIGHT)
    rapport = Button(fenetre,text='Rapport',fg='black',command = rapport, relief="groove",borderwidth=5).pack(side=RIGHT)
    Quitter = Button(fenetre,text='Quitter',fg='black',command = fenetre.destroy, relief="groove",borderwidth=5).pack(side=RIGHT)
     
     
    fen_canvas.mainloop()            
    fenetre.mainloop() 
     
    if __name__ == '__main__':
        window = MainWindow()
        window.show()    
        sys.exit(app.exec_())

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Que font ces lignes dans votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from PySide import QtGui
    from PySide.QtGui import QApplication
    import os, sys,subprocess
     
     
    class MainWindow(QtGui.QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
    ....
    if __name__ == '__main__':
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    Vous écrivez une application tkinter ou Qt4,... à vous de choisir.

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

  3. #3
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Oui, j'ai modifié mon code mais cela ne change pas, le voici....
    listFic.insert(END,"Traitement en cours ....") ne s'affiche qu'après traitement
    merci pour votre réponse

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    #! /usr/bin/python
    #_*_ coding:utf-8 _*_
     
     
    from tkinter import *
    import os, sys,subprocess
     
     
    name = os.getenv("userprofile")
    program = os.getenv("programfiles(x86)")
    program = str(program) 
    Creat_Fic = open("Rapport_find.txt", "w")
    Creat_Fic.write(" Auteur : Moi : "+ "\n"  )
    Creat_Fic.close()
    windows = os.getenv("windir")
    repertoires = windows 
     
    # --------------------------------------------------------------------------------------
    # Fenetre principale
    # --------------------------------------------------------------------------------------
    fenetre = Tk()
    fenetre.title("Recherche d'un fichier")  
    fenetre.geometry('900x220+200+300')
    fenetre.wm_iconbitmap('icone_guw.ico')  # icon
    # --------------------------------------------------------------------------------------
    # Fenetre secondaire
    # --------------------------------------------------------------------------------------
    fen_canvas = Canvas(fenetre,bg='white',borderwidth=4,relief=RIDGE,height=400,width=450)
    fen_canvas.pack(side=LEFT)
    # --------------------------------------------------------------------------------------
    # Scrolling fenetre secondaire
    # --------------------------------------------------------------------------------------
    scrollbar = Scrollbar(fen_canvas,bg='blue',orient=VERTICAL)
    scrollbar.pack( side = RIGHT, fill=Y )
    listFic = Listbox(fen_canvas,background = 'ghost white', yscrollcommand = scrollbar.set )
    listFic.pack( side = LEFT, fill = BOTH, ipadx=260, ipady=100, padx=30, pady=50 )
    scrollbar.config( command = listFic.yview )
    # --------------------------------------------------------------------------------------    
    # Label et Zone de saisie
    # --------------------------------------------------------------------------------------
    LabelTxt = Label(fenetre,text=" Nom du fichier à rechercher ",bg="Silver",relief="groove",borderwidth=3) 
    search=StringVar()
    Saisie = Entry(fenetre,width=40, relief="groove", bd=5, bg="white", textvariable=search)
    LabelTxt.pack(expand=True)
    Saisie.pack(expand=True)
    # --------------------------------------------------------------------------------------
    # Photo insérée dans fenetre principale
    # --------------------------------------------------------------------------------------
    photo=PhotoImage(file="2014-06-02_192814.gif")
    pagegarde = Label(fenetre, image=photo)
    pagegarde.pack(expand=True)
     
     
     
     
    # --------------------------------------------------------------------------------------
    # Fonction de recherche fichier
    # --------------------------------------------------------------------------------------
    def recherche():
        listFic.insert(END,"Traitement en cours ....")  -----------> ne s'affiche pas
     
        if  ---- >>>
     
     
                        listFic.insert(END," Répertoire : "+ fichier)   -----> là ok
                        listFic.insert(END," Md5 : "+ res )
     
     
        # Si pas trouvé insert non trouvé
        if AffichageOk == False:
            with open(bureau + "Rapport_find.txt", "a") as repportFail:
                listFic.insert(END,"Fichier : " + str(search.get()) +" introuvable.... ") ----> là ok
     
     
     
    def rapport():
        # Ouverture du rapport dans bloc note    
        xfic = ("Rapport_find.txt")
        subprocess.call(['notepad.exe',xfic],shell=True)
     
    def quitter():
        fenetre.destroy()
        xfic = (bureau + "Rapport_find.txt")
        os.remove(xfic)
     
     
    # --------------------------------------------------------------------------------------
    # Boutons
    # --------------------------------------------------------------------------------------
    validation = Button(fenetre,text='Validation',fg='black',command = recherche, relief="groove",borderwidth=5).pack(side=RIGHT)
    rapport = Button(fenetre,text='Rapport',fg='black',command = rapport, relief="groove",borderwidth=5).pack(side=RIGHT)
    Quitter = Button(fenetre,text='Quitter',fg='black',command = quitter, relief="groove",borderwidth=5).pack(side=RIGHT)
     
     
    fen_canvas.mainloop()            
    fenetre.mainloop()

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

    Quel est l'intérêt de Canvas() dans ce script ?

    Pour scroller une listbox, vous n'avez pas besoin de Canvas().

    De plus, vous avez écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fen_canvas.mainloop()
    fenetre.mainloop()
    Est-ce que vous comprenez bien ce que .mainloop() fait ?

    Il ne faut utiliser qu'une seule boucle principale (main loop) dans votre programme.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #fen_canvas.mainloop()
    fenetre.mainloop()
    Pour finir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quitter = Button(fenetre,text='Quitter',fg='black',command = quitter, relief="groove",borderwidth=5).pack(side=RIGHT)
    Signifie Quitter = None

    Il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Quitter = Button(fenetre,text='Quitter',fg='black',command = quitter, relief="groove",borderwidth=5)
    Quitter.pack(side=RIGHT)
    Et je suppose que je n'ai pas encore tout remarqué.

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

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Thierry_V Voir le message
    Oui, j'ai modifié mon code mais cela ne change pas, le voici....
    listFic.insert(END,"Traitement en cours ....") ne s'affiche qu'après traitement
    Mouais.
    Essayez de jouer avec cet exemple:
    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
    import tkinter as tk
    from time import sleep
     
    def do_action1():
        label1['text'] = 'start'
        sleep(1)
        label1['text'] = 'done'
     
    btn1 = tk.Button(text='action-1', command=do_action1)
    btn1.grid(row=0, column=0)
    label1 = tk.Label(text='init')
    label1.grid(row=0, column=1)
     
    def do_action2():
        label2['text'] = 'start'
        label2.update_idletasks()
        sleep(1)
        label2['text'] = 'done'
     
    btn2 = tk.Button(text='action-2', command=do_action2)
    btn2.grid(row=1, column=0)
    label2 = tk.Label(text='init')
    label2.grid(row=1, column=1)
     
    tk.mainloop()
    le "sleep" est la pour simuler l'attente de la fin du traitement.

    Je ne vais pas essayer de vous expliquer ce que sont event-loop et callbacks: les tutos sont faits pour çà, voir le chapitre 10 du Swinnen.

    Bon courage,

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

  6. #6
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonsoir,

    Pour le mainloop, oui je reconnais l'erreur
    pour quitter, en plaçant le pack en fin je pensais que cela était la même chose et pour moi quitter était considéré comme variable, voilà pourquoi
    Ceci dit mon problème reste entier, par contre si je met print() au lieu d'un listfic.insert, le programme affiche bien
    le reste du programme fonctionne très bien, ce sont des for et ouverture fichier avec un list insert suivant résultat

    merci pour votre soutien

  7. #7
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonsoir wiztricks

    Alors j'ai fais l'essai mais pas concluant, ceci dit, j'ai remarqué que si je valide la zone de saisie sans y saisir, donc à blanc, <teste comme le montre le bout de code>, Et bien là, la listbox s'affiche

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def recherche():
        listFic.insert(END,"Traitement en cours ....")
     
        if str(search.get()) == '':
            return
    tarball69, je découvre python depuis -1 mois, je te rassure mais dans un ancien langage, j'ai développé professionnellement dans les années 80, donc la programmation objet n'existait pas et sous MS Dos et non sous Windows, d'où la difficulté. cordialement

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    tarball69, je découvre python depuis -1 mois, je te rassure mais dans un ancien langage, j'ai développé professionnellement dans les années 80, donc la programmation objet n'existait pas et sous MS Dos et non sous Windows, d'où la difficulté. cordialement
    Y a pas de mal.

    Moi aussi, j'ai développé dans les années 80 (voir mon profil pour s'en convaincre) : assembleur Z-80, BASIC Sinclair ZX-81, Spectrum, Oric-1, Atmos, BASIC Locomotive AMSTRAD CPC464/6128, C64, C128, CP/M, QDOS et j'en passe.

    Mais -euh- je ne vois pas le rapport avec les "rectifs" que je vous ai indiquées : si vous mettez des erreurs dans votre script qui risquent de masquer les symptômes du problème que vous tentez de résoudre, il me semble pertinent de vous en aviser.

    Je ne vous ai pas fait des reproches, seulement des rectifs importantes pour ne pas ramer indéfiniment.

    @+.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    Alors j'ai fais l'essai mais pas concluant, ceci dit, j'ai remarqué que si je valide la zone de saisie sans y saisir, donc à blanc, <teste comme le montre le bout de code>, Et bien là, la listbox s'affiche
    "a blanc", c'est le mode d'utilisation normal.
    La question est de comprendre pourquoi çà m... lorsque vous y ajoutez des traitements.
    C'est là qu'il faut prendre le temps de comprendre eventloop et callbacks en lisant le tuto.

    Un autre sujet sera "comment faire avec ce binz". Comme il faut adapter la solution à chaque cas, sans comprendre la mécanique de la chose, çà ne sera pas facile.

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

  10. #10
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Ho, oui pas de souci, d'ailleurs c'est bien, c'est assez drôle, mon premier programme fût sous CPM en basic sur Amstrad , Amstrad 256, si mes souvenir son bon, il y avait une imprimante avec. Le langage que j'utilisais Clipper5 vers la fin

    Au départ j'ai réalisé le bout de code seulement en python, et là, nickel, c'est en voulant utiliser Tkinter que j'ai le souci
    En tout cas merci de ton aide.

  11. #11
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    "a blanc", c'est le mode d'utilisation normal.
    La question est de comprendre pourquoi çà m... lorsque vous y ajoutez des traitements.
    C'est là qu'il faut prendre le temps de comprendre eventloop et callbacks en lisant le tuto.

    Un autre sujet sera "comment faire avec ce binz". Comme il faut adapter la solution à chaque cas, sans comprendre la mécanique de la chose, çà ne sera pas facile.

    - W

    Oui ,comprendre, je vois bien la chose. Le traitement est sur l'analyse d'un fichier et j'utilise la lib hashlib pour chercher le MD5 des fichiers, plus le résultat sur fichier txt. Rien de plus

    Je vais lire le tuto eventloop et callbacks

    merci

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

    Tenez, essayez ceci et voyez si ça peut vous convenir :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
     
    import os, sys, subprocess
    import time
    from tkinter import *
     
    # --------------------------------------------------------------------------------------
    # Zone de définition de fonctions
    # --------------------------------------------------------------------------------------
     
    def echo (text):
        console.insert(END, *str(text).split("\n"))
        console.yview_moveto(1)
        console.update_idletasks()
    # end def
     
    def recherche():
        echo("Traitement en cours...")
        with open(fichier_rapport, "a") as xfic:
            # ceci est juste un test
            for i in range(1, 11):
                echo("Ceci est juste un test numéro {}".format(i))
                xfic.write("Rapport no. {}\n".format(i))
                time.sleep(0.5)
            # end for
        # end with
        echo("\n=== Fin du test ===\n")
        echo("Cliquez sur 'Rapport' pour voir...\n")
    # end def
     
    def rapport():
        # Ouverture du rapport dans bloc note
        subprocess.call(['notepad.exe', fichier_rapport], shell=True)
    # end def
     
    def quitter():
        fenetre.destroy()
        os.remove(fichier_rapport)
    # end def
     
    # --------------------------------------------------------------------------------------
    # Environnement fichiers
    # --------------------------------------------------------------------------------------
     
    name = os.getenv("userprofile")
    program = os.getenv("programfiles(x86)")
    program = str(program)
    windows = os.getenv("windir")
    repertoires = windows
    local_dir = os.path.normpath(os.path.dirname(__file__))
    fichier_rapport = os.path.join(local_dir, "Rapport_find.txt")
     
    with open(fichier_rapport, "w") as xfic:
        xfic.write("Auteur : Moi\n")
    # end with
     
    # --------------------------------------------------------------------------------------
    # Interface graphique (IHM / GUI)
    # --------------------------------------------------------------------------------------
     
    fenetre = Tk()
    fenetre.title("Recherche d'un fichier")
     
    frame = Frame(fenetre, bg="black")
    frame.pack(side=TOP, expand=1, fill=BOTH)
     
    scrollbar = Scrollbar(frame, orient=VERTICAL)
    scrollbar.pack(side=RIGHT, fill=Y)
     
    console = Listbox(
        frame,
        bg="black",
        fg="light green",
        relief=FLAT,
        highlightthickness=0,
        yscrollcommand=scrollbar.set,
        width=80,
    )
    console.pack(side=LEFT, fill=BOTH, expand=1, padx=5, pady=5)
     
    scrollbar.configure(command=console.yview)
     
    # --------------------------------------------------------------------------------------
    # Label et Zone de saisie
    # --------------------------------------------------------------------------------------
     
    Label(fenetre,text="Nom du fichier à rechercher :").pack(side=LEFT)
    search = StringVar()
    Entry(fenetre, width=20, textvariable=search).pack(side=LEFT, fill=X, expand=1, padx=5)
     
    # --------------------------------------------------------------------------------------
    # Photo insérée dans fenetre principale
    # --------------------------------------------------------------------------------------
     
    #photo = PhotoImage(file="2014-06-02_192814.gif")
    #Label(fenetre, image=photo).pack()
     
    # --------------------------------------------------------------------------------------
    # Boutons
    # --------------------------------------------------------------------------------------
     
    Button(fenetre, text='Quitter', command=quitter).pack(side=RIGHT, padx=5, pady=5)
    Button(fenetre, text='Rapport', command=rapport).pack(side=RIGHT, padx=5, pady=5)
    Button(fenetre, text='Validation', command=recherche).pack(side=RIGHT, padx=5, pady=5)
     
    echo("""Logiciel de recherche et d'analyse de fichiers
    (c) 2014 mézigue et compagnie
    Publié sous GNU GPL General Public License v3
    Mentions, etc...
     
    *** Pour lancer la démo, cliquez sur 'Validation'... ***
    """)
     
    fenetre.mainloop()
    Bon courage.

    @+.

  13. #13
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour tarball69

    J'ai juste ajouté ces deux lignes et ça fonctionne, nickel, merci
    je vais voir pour une barre de progression maintenant dans la boucle de recherche du répertoire

    par contre en tkinter existe t-il la fonction qui sélectionne un répertoire dans une box comme qt avec la sélection fichier (fichier = QtGui.QFileDialog.getOpenFileName(self,....))

    Donc cela permet une MAJ forcée de la listbox ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    listFic.yview_moveto(1)
    listFic.update_idletasks()

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    Bonjour tarball69

    je vais voir pour une barre de progression maintenant dans la boucle de recherche du répertoire
    Pour une ProgressBar : http://infohost.nmt.edu/tcc/help/pub...ogressbar.html

    ttk est désormais incluse dans tkinter (Python3) :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import tkinter as TK
     
    from tkinter import ttk
     
    fenetre = TK.Tk()
     
    pbar = ttk.Progressbar(fenetre, mode="indeterminate", maximum=10)
     
    pbar.pack()
     
    pbar.start()
     
    ttk.Button(fenetre, text="Quitter", command=fenetre.destroy).pack()
     
    fenetre.mainloop()
    par contre en tkinter existe t-il la fonction qui sélectionne un répertoire dans une box comme qt avec la sélection fichier (fichier = QtGui.QFileDialog.getOpenFileName(self,....))
    Oui, c'est la lib tkFileDialog (Python2) ou la lib tkinter.filedialog (Python3) - ces 2 libs font la même chose :

    http://infohost.nmt.edu/tcc/help/pub...ileDialog.html (doc officielle mais incomplète)

    Plus précisément : http://tkinter.unpythonic.net/wiki/tkFileDialog (ici on trouve .askdirectory())

    Exemple :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    import tkinter as TK
     
    from tkinter.filedialog import askdirectory
     
     
    def dlg_select_dir ():
     
        target_dir = askdirectory(
     
            title="Choisissez un dossier",
     
            initialdir=".",
     
            mustexist=True,
     
            parent=fenetre,
        )
     
        if target_dir:
     
            print("user has selected directory: '{}'".format(target_dir))
     
        else:
     
            print("user has cancelled dialog box")
     
        # end if
     
    # end def
     
     
    fenetre = TK.Tk()
     
    TK.Button(fenetre, text="Sélectionner un dossier", command=dlg_select_dir).pack(padx=10, pady=10)
     
    TK.Button(fenetre, text="Quitter", command=fenetre.destroy).pack(padx=5, pady=5)
     
    fenetre.mainloop()
    Donc cela permet une MAJ forcée de la listbox ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    listFic.yview_moveto(1)
    listFic.update_idletasks()
    la méthode .yview_moveto(ratio) force le scrolling de la listbox selon un ratio 0 <= ratio <= 1 avec ratio = 0 (début de liste) et ratio = 1 (fin de liste).

    la méthode universelle .update_idletasks() force la mise à jour des tâches en sommeil (idle tasks), or tkinter diffère ses affichages et dessins de widgets en tant que idle tasks, d'où la nécessité parfois de le forcer à se mettre à jour à un moment précis (peu recommandé malgré tout).

    attention : des utilisations fréquentes et abusives de w.update() et w.update_idletasks() peuvent mener à des comportements inattendus de tkinter.

    voir ici : http://infohost.nmt.edu/tcc/help/pub...universal.html

    extraits :

    w.update()

    This method forces the updating of the display. It should be used only if you know what you're doing, since it can lead to unpredictable behavior or looping. It should never be called from an event callback or a function that is called from an event callback.

    w.update_idletasks()

    Some tasks in updating the display, such as resizing and redrawing widgets, are called idle tasks because they are usually deferred until the application has finished handling events and has gone back to the main loop to wait for new events.

    If you want to force the display to be updated before the application next idles, call the w.update_idletasks() method on any widget.
    Toute la doc officielle de Tkinter : http://infohost.nmt.edu/tcc/help/pub...web/index.html

    @+.

  15. #15
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Houa ben merci, de la lecture en vue

    je ne sais pas se que tu en pense mais je viens de découvrir easygui

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    Bonjour,

    Houa ben merci, de la lecture en vue

    je ne sais pas se que tu en pense mais je viens de découvrir easygui
    Je ne connais pas easygui, mais je connais bien tkRAD - Tkinter XML widget builder - et pour cause - j'en suis l'auteur !

    PyPI tkRAD : https://pypi.python.org/pypi/tkRAD/1.5-Sugar-Extra

    Documentation en français : https://github.com/tarball69/tkRAD/wiki/Accueil

    Ce projet-là, je sais qu'il fonctionne OK, vu que je l'ai testé / blindé.

    Pour les autres projets, hum, eh bien, je n'ai pas vraiment eu le temps d'aller regarder, vu que j'avais le nez dans le guidon de tkRAD ces derniers mois.

    @+.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    easygui a été construit pour permettre à des débutants de construire une interface sympa (avec des widgets tkinter) sans devoir apprendre la programmation événementielle (event loop, callbacks,...) qui va avec.
    L'objectif étant d'éviter la démotivation de certains élèves devant l'interface "console": elle fait plutôt "has been" pour les habitués des smart-phones, tablettes et autres jouets.

    Il peut être intéressant de regarder comment c'est construit, mais ses fonctionnalités sont plutôt limitées...
    De plus, vous avez probablement passé l'age.

    Citation Envoyé par tarball69 Voir le message
    Pour les autres projets, hum, eh bien, je n'ai pas vraiment eu le temps d'aller regarder, vu que j'avais le nez dans le guidon de tkRAD ces derniers mois.
    easygui n'est pas aussi récent. Et il existe même un équivalent pour les lycéens français (dont je ne connais plus le nom).

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

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    easygui n'est pas aussi récent. Et il existe même un équivalent pour les lycéens français (dont je ne connais plus le nom).

    - W
    Quand on sait que j'ai "découvert" effbot.org il y a moins d'un an... je vous laisse imaginer pour le reste !

    Généralement, quand un défi technique point à l'horizon, j'aime bien m'y jeter, quitte parfois à réinventer un peu la roue.

    Certains projets m'interpellent plus que d'autres. Peut-étre que j'ai vu passer easygui dans l'une ou l'autre de mes requêtes gooogle, mais apparemment le projet ne m'a pas intéressé plus que ça.

    Sinon, je m'en serais sans aucun doute souvenu.

    @+.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/04/2011, 19h53
  2. Elt d'un Listbox qui ne s'affiche pas en integral
    Par zaiany dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/06/2007, 12h54
  3. 3 Combobox (Listbox) en cascade la 3éme colonne ne s'affiche pas
    Par minogttao dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/11/2006, 22h44
  4. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 18h56

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