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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    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 683
    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 confirmé 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
    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
    Membre confirmé 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
    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

  6. #6
    Membre confirmé 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
    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

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    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 683
    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

+ 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