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 :

Fenetre 'please wait'


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut Fenetre 'please wait'
    Salut,
    je cherche à faire en sorte à ce que pendant que des calculs sont faits et que ma fenêtre principale 'self' se crée, un fenêtre 'please wait' soit ouverte, puis se ferme quand 'self' est créée.
    J'ai compris que je pouvais le faire en passant pas le threading, mais ma fenêtre 'self' n'est pas initialisée dès le début pour ne pas afficher une fenêtre vide, ce qui m'empêche de créer 'please wait' en toplevel, et il me semble qu'on ne peut créer 2 fenêtres principales en même temps.
    Si quelqu'un à une idée comment faire. . .

  2. #2
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par MangeMouette Voir le message
    pendant que des calculs sont faits et que ma fenêtre principale 'self' se crée, un fenêtre 'please wait' soit ouverte, puis se ferme quand 'self' est créée.
    Est-ce vraiment la seule solution? N est-il pas possible d envisager de creer votre fenetre principale et de faire les calculs ensuite?

    Citation Envoyé par MangeMouette Voir le message
    J'ai compris que je pouvais le faire en passant pas le threading, mais ma fenêtre 'self' n'est pas initialisée dès le début pour ne pas afficher une fenêtre vide, ce qui m'empêche de créer 'please wait' en toplevel, et il me semble qu'on ne peut créer 2 fenêtres principales en même temps.
    Dans ce cas, tu peux faire de ta "fenêtre principale" ton "please wait" et une fois tes calculs acheves, tu detruis tout ce qu elle contient, et y positionnes ce dont tu as besoin.

  3. #3
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par afranck64 Voir le message
    Dans ce cas, tu peux faire de ta "fenêtre principale" ton "please wait" et une fois tes calculs acheves, tu detruis tout ce qu elle contient, et y positionnes ce dont tu as besoin.
    (.withdraw(), Toplevel etc. C'est un splashscreen en fait.)

    Du code svp MangeMouette.

    @+

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    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
     
    # -*-coding:Latin-1 -*
     
    ## IMPORTATIONS #####################################################################
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    import os
    from PIL import Image, ImageTk
    import Pmw
    import urllib
    import platform
    import threading
     
    ## START LISTES #####################################################################
     
    nomUtilisateur = os.environ.get("USERNAME")
    nomUtilisateur = str(nomUtilisateur)
     
    if platform.system()!="Windows":
        error("Error : " + platform.system() + " is not supported platform.")
    else:
        if platform.release()=="7" or platform.release()=="Vista":
            chemin_rainmeter_ini="C:/Users/"+nomUtilisateur+"/AppData/Roaming/Rainmeter/"
        elif platform.release()=="XP":
            chemin_rainmeter_ini="C:/Documents and Settings/"+nomUtilisateur+"/Application Data/Rainmeter/"
     
        if os.path.exists(chemin_rainmeter_ini + "Rainmeter.ini") == False:
            error("Rainmeter is not installed, you can get it here :")
        else:
           ## LES CALCULS SE FONT LA ##
     
        ## START WINDOW #####################################################################
            class simpleapp_tk(Tk.Tk):
                def __init__(self):
                    Tk.Tk.__init__(self)
                    self.vsb = Tk.Scrollbar(self, orient=Tk.VERTICAL)
                    self.vsb.grid(row=0, column=1, sticky=Tk.N+Tk.S)
                    self.hsb = Tk.Scrollbar(self, orient=Tk.HORIZONTAL)
                    self.hsb.grid(row=1, column=0, sticky=Tk.E+Tk.W)
                    self.canv = Tk.Canvas(self,
                                          yscrollcommand=self.vsb.set,
                                          xscrollcommand=self.hsb.set)
                    self.canv.grid(row=0, column=0, sticky=Tk.N+Tk.S+Tk.E+Tk.W)
                    self.vsb.config(command=self.canv.yview)
                    self.hsb.config(command=self.canv.xview)
                    self.grid_columnconfigure(0, weight=1)
                    self.grid_rowconfigure(0, weight=1)
                    self.frm = Tk.Frame(self.canv)
                    self.iconbitmap("images/updater.ico")
     
                    ## ETC...##
     
            if __name__ == "__main__":
                app = simpleapp_tk()
                app.title("Rainmeter updater")
                app.mainloop()

  5. #5
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Ou,

    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
    # -*-coding:Latin-1 -*
     
    ## IMPORTATIONS #####################################################################
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    import os
    #from PIL import Image, ImageTk
    #import Pmw
    #import urllib
    import platform
    #import threading
     
    ## START LISTES #####################################################################
    def start():
     
        nomUtilisateur = os.environ.get("USERNAME")
        # nomUtilisateur = str(nomUtilisateur)
        # ...
        graphic_app = simpleapp_tk()
        # simulation des calculs
        import time
        time.sleep(10)
        #
        graphic_app.initialize()
     
     
    ## START WINDOW #####################################################################
    class simpleapp_tk(Tk.Tk):
        def __init__(self):
            Tk.Tk.__init__(self)
            self.wisplash = Tk.Toplevel()
            Tk.Label(self.wisplash, text="Pease wait...", fg="red").pack(padx=5, pady=5)
            self.wisplash.update()
            self.withdraw()
            self.title("Rainmeter updater")
     
        def initialize(self):
            self.vsb = Tk.Scrollbar(self, orient=Tk.VERTICAL)
            self.vsb.grid(row=0, column=1, sticky=Tk.N+Tk.S)
            self.hsb = Tk.Scrollbar(self, orient=Tk.HORIZONTAL)
            self.hsb.grid(row=1, column=0, sticky=Tk.E+Tk.W)
            self.canv = Tk.Canvas(self,
                                  yscrollcommand=self.vsb.set,
                                  xscrollcommand=self.hsb.set)
            self.canv.grid(row=0, column=0, sticky=Tk.N+Tk.S+Tk.E+Tk.W)
            self.vsb.config(command=self.canv.yview)
            self.hsb.config(command=self.canv.xview)
            self.grid_columnconfigure(0, weight=1)
            self.grid_rowconfigure(0, weight=1)
            self.frm = Tk.Frame(self.canv)
            #self.iconbitmap("images/updater.ico")
     
                    ## ETC...##
            self.wisplash.destroy()
            self.deiconify()
            self.mainloop()
     
    if __name__ == "__main__":
        start()

  6. #6
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Ou encore
    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
    # -*-coding:Latin-1 -*
     
    ## IMPORTATIONS #####################################################################
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
    import os
    #from PIL import Image, ImageTk
    #import Pmw
    #import urllib
    import platform
    #import threading
     
    ## START LISTES #####################################################################
     
    ## START WINDOW #####################################################################
    class simpleapp_tk(Tk.Tk):
        def __init__(self):
            Tk.Tk.__init__(self)
            self.wisplash = Tk.Toplevel()
            Tk.Label(self.wisplash, text="Pease wait...", fg="red").pack(padx=5, pady=5)
            self.wisplash.update()
            self.withdraw()
            self.title("Rainmeter updater")
     
        def initialize(self):
            self.vsb = Tk.Scrollbar(self, orient=Tk.VERTICAL)
            self.vsb.grid(row=0, column=1, sticky=Tk.N+Tk.S)
            self.hsb = Tk.Scrollbar(self, orient=Tk.HORIZONTAL)
            self.hsb.grid(row=1, column=0, sticky=Tk.E+Tk.W)
            self.canv = Tk.Canvas(self,
                                  yscrollcommand=self.vsb.set,
                                  xscrollcommand=self.hsb.set)
            self.canv.grid(row=0, column=0, sticky=Tk.N+Tk.S+Tk.E+Tk.W)
            self.vsb.config(command=self.canv.yview)
            self.hsb.config(command=self.canv.xview)
            self.grid_columnconfigure(0, weight=1)
            self.grid_rowconfigure(0, weight=1)
            self.frm = Tk.Frame(self.canv)
            #self.iconbitmap("images/updater.ico")
     
                    ## ETC...##
            self.wisplash.destroy()
            self.deiconify()
            self.mainloop()
     
    if __name__ == "__main__":
        nomUtilisateur = os.environ.get("USERNAME")
        # nomUtilisateur = str(nomUtilisateur)
        # ...
        graphic_app = simpleapp_tk()
        # simulation des calculs
        import time
        time.sleep(10)
        #
        graphic_app.initialize()

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Merci.
    Par contre, il me faut les résultats des calculs avant de pouvoir initier la fenêtre principale, ce qui crée une erreur puisqu'elle est initiée au début des calculs pour pouvoir afficher la toplevel.
    Une idée ?

  8. #8
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par MangeMouette Voir le message
    Par contre, il me faut les résultats des calculs avant de pouvoir initier la fenêtre principale, ce qui crée une erreur puisqu'elle est initiée au début des calculs pour pouvoir afficher la toplevel.
    Quelle erreur ?
    Nous n'avons dans l'__init__() qu'une instance tk() 'vierge' et un Toplevel.
    Les résultats sont pour remplir l'affichage non ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Au temps pour moi, j'avais mal lu ton code. . .

    Par contre je me trouve confronté au fait que j'ai des variables modifiées dans 'def start():' dont je dois récupérer les nouvelles valeurs hors 'def start():'.
    Est-ce que déclarer toutes ces variables globale n'est pas très propre ?
    Si oui, quel meilleur moyen y aurait il ?
    Promis, plus de question ici, après !

    En tout cas merci pour tout !

  10. #10
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Citation Envoyé par MangeMouette Voir le message
    Est-ce que déclarer toutes ces variables globale n'est pas très propre ?
    Si oui, quel meilleur moyen y aurait il ?
    Euh, non, je ne pense pas. Vous devriez passer par une classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Projet:
        def __init__(self):
            self.objet1 = None
            self.objet2 = None
            self.nomUtilisateur = "name"
            "..."
     
        def start(self):
            self.objet1 = "new value"
            self.objet2 = "new, new value!"
     
        def get(self):
            return self.objet1, self.objet2
    def other(self):
    "... bla ...bla"
    Citation Envoyé par MangeMouette Voir le message
    Promis, plus de question ici, après !
    Je pense qu il n y a pas de soucis

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Parfait !
    J'ai réussi à faire tout ce que je voulais.

    Merci beaucoup à tous pour vos réponses et bonne continuation !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/10/2011, 11h43
  2. Réponses: 4
    Dernier message: 05/04/2011, 15h51
  3. Réponses: 7
    Dernier message: 05/09/2009, 21h49
  4. Réponses: 6
    Dernier message: 04/05/2009, 13h15
  5. comment avoir un "please wait" lors de chargements
    Par groupe dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 12/06/2008, 14h52

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