Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python 3 tkinter : Too early to create image

trop tôt pour créer une image

Anonyme
    19 février 2020 à 1:38:54

    Bonjour,

    j'essaye de ranger un mon code dans des fonctions et une class.

    Il me dit "trop tôt pour créer une image " que faire avec les images ??

    #!/usr/bin/env python
    
    # -*- coding: UTF-8 -*-
    
    #UL453
    
    from tkinter import*
    
    import time
    
    global windows_app
    
    class windows_app():
    
    windows = Tk()
    
    windows.title("UL453")
    
    windows.configure()
    
    global centreur
    
    centreur = Frame(width=200, height=200)
    
    centreur.pack(fill="both", anchor="w",expand=True)
    
    fond_img = PhotoImage(file="a.png")
    
    img = Label(centreur, image=fond_img)
    
    img.pack(anchor="ne")
    
    windows.mainloop()
    
    global system_tuile, compt_tuile, game_tuile
    
    def system_tuile():
    
    switch_off = PhotoImage(file="Icons.62.png")
    
    icon_system = Frame(width=100, height=100,bg="yellow")
    
    #icon_system.place(in_=centreur, anchor="c", relx=.1, rely=.5)
    
    img_icon_system = Button(icon_system, image=switch_off,relief="flat", bg="red")
    
    img_icon_system.pack()
    
    icon_system_text = Label(icon_system, text="SYSTEM", bg="yellow",fg="#000",font=(None, 15))
    
    icon_system_text.pack(side=BOTTOM)
    
    def compt_tuile():
    
    compt = PhotoImage(file="Icons.6.png")
    
    icon_compt = Frame(width=100, height=100,bg="yellow")
    
    #icon_compt.place(in_=centreur, anchor="c", relx=.2, rely=.5)
    
    img_compt = Button(icon_compt, image=compt,relief="flat",bg="red")
    
    img_compt.pack()
    
    compt_categorie_icon = Label(icon_compt, text="USER_app",bg="yellow",fg="#000",font=(None, 15))
    
    compt_categorie_icon.pack(side=BOTTOM)
    
    def game_tuile():
    
    GAME = PhotoImage(file="Icons.39.png")
    
    icon_GAME = Frame(width=100, height=100,bg="yellow")
    
    #icon_GAME.place(in_=centreur, anchor="c", relx=.3, rely=.5)
    
    img_GAME = Button(icon_GAME, image=GAME,relief="flat",bg="red")
    
    img_GAME.pack()
    
    GAME_categorie_icon = Label(icon_GAME, text="GAME_app",bg="yellow",fg="#000",font=(None, 15))
    
    GAME_categorie_icon.pack(side=BOTTOM)
    
    def animation_precept():
    
    windows_app()
    
    time.sleep(1)
    
    system_tuile()
    
    compt_tuile()
    
    game_tuile()
    
    animation_precept()



    -
    Edité par Anonyme 19 février 2020 à 2:06:36

    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2020 à 1:42:48

      ton code n'est pas lisible, utilise la balise "code" pour l'afficher.
      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2020 à 2:24:53

        Tu as certes utilisé les balises de code mais tu as perdu l'indentation donc ton code n'est pas utilisable. En plus il faudrait un lien vers un zip des images.

        Concernant ton problème, il vient sans doute du fait que ton code est d'abord bloqué dans la mainloop (normal) mais une fois que tu supprimes la fenêtre avec la croix, tu appelles system_tuile alors qu'il n'y a plus de fenêtre (tu l'as créés dans la fonction windows_app() et qui n'a plus d'existence) et donc les appels à des fonction Tkinter vont crasher.

        Ta mainloop (ta ligne 33) doit être à la fin de l'exécution, tout ce qui vient après est invisible, ce sont les bases de la programmation événementielle.

        • Partager sur Facebook
        • Partager sur Twitter
          19 février 2020 à 11:24:05

          On a cette erreur quand on crée une image avant d'avoir créé un Tk().

          J'ai pas lu le code, 'fin j'ai vu "global" et j'ai arrêté de lire :-°

          -
          Edité par thelinekioubeur 19 février 2020 à 11:24:48

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            20 février 2020 à 16:05:50

            :D ok merci de vos réponse !

            Qu'elle conseille donnerais vous pour bien ranger le code ?

            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2020 à 7:02:51

              Là ce n'est pas qu'une question de rangement. Il faudrait commencer par :

              1- Ne jamais utiliser global

              2- Idéalement, faire des classes (tkinter n'est pas trop fait pour être utilisé sans)

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                22 février 2020 à 9:43:44

                Oui mais sans global il me renvoie une erreur
                • Partager sur Facebook
                • Partager sur Twitter
                  22 février 2020 à 16:44:12

                  Laquelle ?
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Blond, bouclé, toujours le sourire aux lèvres...

                  Anonyme
                    22 février 2020 à 17:39:59

                    Si je met en commentaire tous mes global:

                    #!/usr/bin/env python
                    # -*- coding: UTF-8 -*-
                    #ULHOKD453
                    
                    from tkinter import*
                    import subprocess
                    import pygame
                    
                    
                    class app_os_explotation():
                    
                        version = " 1.0 "
                        version_name = "YHUTE (Quik and dirty) LI first name I "
                        version_built = "230P0D0"
                        author = " IIX61"
                        version_info = version_name + version  + version_built + author
                    
                        #global OS
                        OS = Tk()
                        w, h = OS.winfo_screenwidth(), OS.winfo_screenheight()
                        OS.geometry("%dx%d+0+0" % (w, h))
                        OS.title("LI v.1.1")
                        OS.iconbitmap('li_icon.ico')
                        
                        #global centreur
                        centreur = Frame(width=100, height=100,bg="gray")
                        centreur.pack(fill="both", anchor="c",expand=True)
                    
                    
                        #global fond_img
                        fond_img = PhotoImage(file="ressources/default.png")
                        img = Label(centreur, image=fond_img)
                        img.pack()
                    
                        #global bg_frame_tuiles,bg_tuiles,tuiles_text_font,bg_text,fg_text
                        bg_frame_tuiles = "#000"
                        bg_tuiles = "#00FF88"
                        tuiles_text_font = "Segoe Script", 15
                        bg_text = "#000"
                        fg_text = "#1399D5"
                    
                        pygame.init()
                        #global son
                        son = pygame.mixer.pre_init(44100, 16, 2, 4096)
                        son = pygame.mixer.Sound("audio/music_home.ogg")
                        son.play()
                    
                        #global switch_background
                        switch_background = pygame.mixer.pre_init(44100, 16, 2, 4096)
                        switch_background = pygame.mixer.Sound("audio/switch_background.ogg")
                        
                        #global system_img, game_img, cube_jump_img,theme_img
                        system_img = PhotoImage(file="Icons.62.png")
                        game_img = PhotoImage(file="Icons.39.png")
                        cube_jump_img = PhotoImage(file="$Scard\GAME\PP800CUBESHOOT\cb.png")
                        theme_img = PhotoImage(file="Icons.23.png")
                    
                        def system_tuiles():
                            icon_system = Frame(width=100, height=100,bg=bg_frame_tuiles)
                            icon_system.place(in_=centreur, anchor="c", relx=.1, rely=.5)
                            img_icon_system = Button(icon_system, image=system_img,relief="flat",bg=bg_tuiles, command=OS.destroy)
                            img_icon_system.pack()
                            icon_system_text = Label(icon_system, text="System", bg=bg_text,fg="#1399D5",font=tuiles_text_font)
                            icon_system_text.pack(side=TOP)
                            tuiles_type = "system"
                        
                    
                        class game_app():
                    
                            #global Cube_jump_game
                    
                            def Cube_jump_game():
                                
                                def setTextOnMouseOver(self):
                                    fond_img.config(file="$Scard\GAME\PP800CUBESHOOT\cb_img_over.png")
                                    switch_background.play()
                                    son.stop()
                     
                                def setTextOnMouseLeave(self):
                                    fond_img.config(file="ressources/default.png")
                                    switch_background.stop()
                                    son.play()
                    
                                def lunche_cb():
                                    game_path = "$Scard\GAME\PP800CUBESHOOT\CubeJump.exe"
                                    OS.destroy()
                                    subprocess.Popen(game_path)
                                
                                cube_jump_cadre = Frame(width=100, height=100,bg=bg_frame_tuiles)
                                cube_jump_cadre.place(in_=centreur, anchor="c", relx=.2, rely=.8)
                                img_cube_shoot = Button(cube_jump_cadre, image=cube_jump_img,relief="flat", command=lunche_cb)
                                img_cube_shoot.pack()    
                                tuiles_type = "game_défault"
                                img_cube_shoot.bind("<Enter>", setTextOnMouseOver)
                                img_cube_shoot.bind("<Leave>", setTextOnMouseLeave)
                    
                            
                            def game_app_tuile():
                            
                                icon_game = Frame(width=100, height=100,bg=bg_frame_tuiles)
                                icon_game.place(in_=centreur, anchor="c", relx=.2, rely=.5)
                                img_icon_game = Button(icon_game, image=game_img,relief="flat",bg=bg_tuiles, command=Cube_jump_game)
                                img_icon_game.pack()
                                game_tuiles_text = Label(icon_game, text="Game", bg=bg_text,fg="yellow",font=tuiles_text_font)
                                game_tuiles_text.pack(side=TOP)
                    
                    
                        class theme_app:
                            
                            def theme_app_tuile():
                                #global count
                                count = 0
                                 
                                def cliked():
                                    #global count
                                    count = count+1
                    
                                    if count == 1:
                                        fond_img.config(file="wvs12.png")
                                    elif count == 2:
                                        fond_img.config(file="wvs13.png")
                                    elif count == 3:
                                        fond_img.config(file="wvs14.png")
                                    elif count == 4:
                                        fond_img.config(file="wvs15.png")
                                    elif count == 5:
                                        fond_img.config(file="wvs16.png")
                                    if count > 5:
                                        count = 0
                                    
                                
                                icon_theme = Frame(width=100, height=100,bg=bg_frame_tuiles)
                                icon_theme.place(in_=centreur, anchor="c", relx=.3, rely=.5)
                                img_icon_theme = Button(icon_theme, image=theme_img,relief="flat",bg=bg_tuiles, command=cliked)
                                img_icon_theme.pack()
                                theme_tuiles_text = Label(icon_theme, text="Thème", bg=bg_text,fg="yellow",font=tuiles_text_font)
                                theme_tuiles_text.pack(side=TOP)
                    
                        system_tuiles()
                        game_app.game_app_tuile()
                        theme_app.theme_app_tuile()
                    
                        
                        OS.mainloop()
                    


                    il me renvoie:

                    pygame 1.9.6
                    Hello from the pygame community. 
                    https://www.pygame.org/contribute.html
                    
                    Traceback (most recent call last):
                      File "C:\Users\Alex\Documents\IL\IL APP\LI.py", line 10, in <module>
                        class app_os_explotation():
                      File "C:\Users\Alex\Documents\IL\IL APP\LI.py", line 139, in app_os_explotation
                        system_tuiles()
                      File "C:\Users\Alex\Documents\IL\IL APP\LI.py", line 59, in system_tuiles
                        icon_system = Frame(width=100, height=100,bg=bg_frame_tuiles)
                    NameError: name 'bg_frame_tuiles' is not defined
                    [Finished in 9.8s]



                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 février 2020 à 17:53:03

                      Bruh, forcément si tu vires le mot clé global et la déclaration de la variable, mais que tu adaptes pas le reste du code, ça va poser problème.

                      EDIT : Et pourquoi tout le code est déclaré dans une classe ? Tu as oublié le mot clé self dans les méthode ou alors tu as trop indenté tes fonctions ?

                      Il est bizarre ton code, bizarre au point que je me demande si tu devrais pas reprendre un cours (de qualité de préférence comme celui de G Swinnen) ?

                      EDIT2 : Mais, tu as des méthodes de classe déclarées dans une fonction ? C'est... Surprenant.

                      -
                      Edité par LoupSolitaire 22 février 2020 à 17:58:57

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Blond, bouclé, toujours le sourire aux lèvres...

                      Anonyme
                        22 février 2020 à 18:00:29

                        adapter comment ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 février 2020 à 18:03:46

                          Alex Mikkrow a écrit:

                          adapter comment ?

                          Ça va pas être agréable à entendre, mais vu ton code, je pense que tu as suivi un cours de mauvaise qualité (d'ailleurs je suis curieux de savoir lequel).

                          Ce serait une bonne chose de reprendre sur de bonnes bases : https://inforef.be/swi/download/apprendre_python3_5.pdf

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Blond, bouclé, toujours le sourire aux lèvres...

                          Anonyme
                            22 février 2020 à 18:41:41

                            Si je sors tous mes fontion de ma class il va affichier une erreur à cause du mainloop !

                            Oui je sais, je ne sais n'em pas c'est quoi self (j'ai 17 ans je début) j'ai l'habitude de ne pas mettre de class ni de fonction on mode "quick and dirty" tant que sa marche :D. Mais sa va pas m'empêcher de voire des cours

                            LoupSolitaire a écrit:

                            Alex Mikkrow a écrit:

                            adapter comment ?

                            Ça va pas être agréable à entendre, mais vu ton code, je pense que tu as suivi un cours de mauvaise qualité (d'ailleurs je suis curieux de savoir lequel).

                            Ce serait une bonne chose de reprendre sur de bonnes bases : https://inforef.be/swi/download/apprendre_python3_5.pdf


                            OpenClassrooms et formation vidéo (sur Youtube)  ??  Non non c'est moi qui ne suivais pas suivre le coure correctement !!

                            -
                            Edité par Anonyme 22 février 2020 à 19:02:36

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Python 3 tkinter : Too early to create image

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown