Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Tkinter]faire une liste ou autre avec un canvas

Sujet résolu
    6 avril 2020 à 11:25:54

    Bonjour, je débute sur python. J'aimerai savoir si c est possible de faire une liste, un tuple ou autre avec des canvas.

    Voila mon code:

    from tkinter import*
    import random

    fen = Tk()
    fen.title("fantome")
    canvas = Canvas(fen,width = 250, height = 250, bd = 0, bg = 'black')
    canvas.pack()

    tete = canvas.create_arc(50,40,75,70,fill = 'red',start = 0, extent = 180, outline='red')
    corps = canvas.create_rectangle(50,75,75,55,fill = 'red' ,outline = 'red')

    deplacement()

    fen.mainloop()

    J'aimerai que la tete et le corps ne fasse qu'un.

    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2020 à 13:10:10

      Il faut placer ton code dans les balises du forum.

      Ta question n'est pas claire et ton code ne fonctionne pas (deplacement n'est pas défini).

      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2020 à 13:33:04

        ZetsuSu a écrit:

        J'aimerai savoir si c est possible de faire une liste, un tuple ou autre avec des canvas.

        On peut regrouper des items du Canvas en leur donnant le même tag/étiquette. Et pour un déplacement, on peut l'appliquer à l'étiquette pour déplacer tous les objets correspondants. En cherchant un peu sur Internet vous trouverez certainement des exemples.

        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2020 à 14:30:39

          from tkinter import*
          import random
          
          fen = Tk()
          fen.title("fantome")
          canvas = Canvas(fen,width = 250, height = 250, bd = 0, bg = 'black')
          canvas.pack()
          
          tete = canvas.create_arc(50,40,75,70,fill = 'red',start = 0, extent = 180, outline='red')
          corps = canvas.create_rectangle(50,75,75,55,fill = 'red' ,outline = 'red')
          
          fen.mainloop()

          J'aimerai que grace a une liste ou autre la tete et le corps ne face qu'un

          par exemple:

          fantome = (tete,corps)

          • Partager sur Facebook
          • Partager sur Twitter
            6 avril 2020 à 15:14:02

            Ta question n'est toujours pas claire d'autant plus que dans ton canvas, tête et corps sont reliés (ils ne font qu'un).

            Si tu veux un personnage composé de plusieurs parties, il te faudra les construire une par une et  pour faire le déplacement tu utilises la technique que t'a indiqué mps plus haut. Après rien ne t'empêche de créer une liste qui contient tous les items de ton personnage.

            Tu peux aussi charger des images, ça a souvent un meilleur rendu que de dessiner avec tkinter.

            • Partager sur Facebook
            • Partager sur Twitter
              6 avril 2020 à 15:28:04

              mps a écrit:

              ZetsuSu a écrit:

              J'aimerai savoir si c est possible de faire une liste, un tuple ou autre avec des canvas.

              On peut regrouper des items du Canvas en leur donnant le même tag/étiquette. Et pour un déplacement, on peut l'appliquer à l'étiquette pour déplacer tous les objets correspondants. En cherchant un peu sur Internet vous trouverez certainement des exemples.


              Que veux tu dire par tag/étiquette?
              • Partager sur Facebook
              • Partager sur Twitter
                6 avril 2020 à 19:28:38

                ZetsuSu a écrit:

                Que veux tu dire par tag/étiquette?

                C'est une des multiples fonctionnalités du Canvas que vous devriez regarder vu ce que vous voulez faire.



                -
                Edité par mps 6 avril 2020 à 19:29:52

                • Partager sur Facebook
                • Partager sur Twitter
                  6 avril 2020 à 19:46:37

                  PascalOrtiz a écrit:

                  Ta question n'est toujours pas claire d'autant plus que dans ton canvas, tête et corps sont reliés (ils ne font qu'un).

                  Si tu veux un personnage composé de plusieurs parties, il te faudra les construire une par une et  pour faire le déplacement tu utilises la technique que t'a indiqué mps plus haut. Après rien ne t'empêche de créer une liste qui contient tous les items de ton personnage.

                  Tu peux aussi charger des images, ça a souvent un meilleur rendu que de dessiner avec tkinter.


                  Tete et corps sont collés mais pas reliés c est justement les relier ce que je veux faire
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 avril 2020 à 11:09:09

                    Bonjour,

                    Comme l'a dit @mps, regarde du coté de tag.

                    Pour joindre l'étiquette fantome à l'objet corps et l'objet tête :

                    tete = canvas.create_arc(50,40,75,70,fill = 'red',start = 0, extent = 180, outline='red', tag='fantome')
                    corps = canvas.create_rectangle(50,75,75,55,fill = 'red' ,outline = 'red' tag='fantome')

                    Ainsi si par exemple tu veux déplacer ton fantôme sur l'écran:

                    canvas.move('fantome',x,y)

                    Si Tkinter t'interresse va falloir que tu te plonges dans sa documentation  ou lire des tutos. 

                    http://tkinter.fdex.eu/doc/caw.html




                    • Partager sur Facebook
                    • Partager sur Twitter
                    • J'aime les bananes, le python, le gnu, le pingouin.
                      • Vive le libre !
                      7 avril 2020 à 12:25:10

                      Exemple : tu fais déplacer en même temps la tête, les yeux et le corps du personnage (tag "perso" présent dans les items)  :

                      from tkinter import Tk, Canvas
                      
                      root = Tk()
                      a=50
                      cnv = Canvas(root, width=1000, height=3*a, bg="ivory")
                      cnv.pack()
                      
                      cnv.create_oval((a, 0), (2*a, a), fill='gray', tags=("tete", "perso"))
                      cnv.create_oval((0, a), (3*a, 3*a), fill='pink', tags=("corps", "perso"))
                      
                      w=a/10
                      x=a+a/4
                      y=a/4
                      
                      # les deux yeux
                      cnv.create_oval((x, y), (x+w, y+w), fill='black', tags=("oeil gauche", "perso"))
                      cnv.create_oval((x+1/2*a-w, y), (x+1/2*a, y+w), fill='black', tags=("oeil droit", "perso"))
                      
                      def animate(v):
                          cnv.move("perso", v, 0)
                          cnv.after(25, animate, v)
                      
                      animate(10)
                      
                      root.mainloop() 



                      -
                      Edité par PascalOrtiz 7 avril 2020 à 12:30:08

                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 avril 2020 à 15:28:31

                        Merci beaucoup j ai réussi a faire ce que je voulais
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Tkinter]faire une liste ou autre avec un canvas

                        × 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