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 :

Move object tkinter


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 14
    Par défaut Move object tkinter
    Bonjour,

    J'utilise Tkinter et je veux faire bouger un oval avec la fonction move. Et en fait je veux faire bouger mon oval avec des valeurs qui sont dans une liste.
    Je ne comprends par car au lieu de voir bouger mon oval de ses coordonnées initiales vers les 4 coordonnées de la liste, lorsque je lance mon programme mon oval prend directement la derniere valeur de la liste.

    Pouvez-vous me dire pourquoi,

    Merci,


    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
    l = [10,15,25,50]
     
    for i in l:
        def move_():
            Canevas.move(Balle,i,0)
     
    Mafenetre = Tk()
    Mafenetre.geometry('500x500')
     
    Canevas = Canvas(Mafenetre,height=550,width=550,bg='white')
    oval = Canevas.create_oval(5,8,480,480)
    Canevas.pack(padx=5,pady=5)
     
    x0 = 495/2
    y0 = 495/2
    y1 = 455/2
    y2 = 449/2
     
    Balle = Canevas.create_oval(x0,y0,x1,y1,width=3)
     
    move_()
    Mafenetre.after(10000,move_)
    Mafenetre.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    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 687
    Par défaut
    Salut,

    Citation Envoyé par larrieur Voir le message
    Pouvez-vous me dire pourquoi
    Postez un code qui puisse fonctionner, là avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in l:
        def move_():
            Canevas.move(Balle,i,0)
    çà plante avant que la fonction ait été définie.

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

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 14
    Par défaut
    Pardon voici le code

    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
     
    from tkinter import *
    l = [10,15,25,50]
     
    for i in l:
        def move_():
            Canevas.move(Balle,i,0)
     
    Mafenetre = Tk()
    Mafenetre.geometry('500x500')
     
    Canevas = Canvas(Mafenetre,height=550,width=550,bg='white')
    oval = Canevas.create_oval(5,8,480,480)
    Canevas.pack(padx=5,pady=5)
     
    x0 = 495/2
    y0 = 495/2
    y1 = 455/2
    y2 = 449/2
     
    Balle = Canevas.create_oval(x0,y0,x1,y1,width=3)
     
    move_()
    Mafenetre.after(10000,move_)
    Mafenetre.mainloop()

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    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 687
    Par défaut
    Salut,

    Essayez de relire le code que vous avez écrit et de comprendre ce que Python va bien pouvoir en faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in l:
        def move_():
            Canevas.move(Balle,i,0)
    Va définir la fonction move_ autant de fois qu'il y a d'itération.
    A la sortie de la fonction, move_ sera la dernière fonction définie avec i = 50.

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

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 14
    Par défaut
    D'accord je comprends mais comment je peux faire pour qu'il retourne à chaque fois la valeur pour chaque i et pas seulement la derniére ?

    Merci,

    Renaud

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    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 687
    Par défaut
    Salut,

    Citation Envoyé par larrieur Voir le message
    D'accord je comprends mais comment je peux faire pour qu'il retourne à chaque fois la valeur pour chaque i et pas seulement la derniére ?
    Soit une liste L = [10, 15, 25, 50], comment écrire une fonction F (sans paramètre) qui a chaque appel retournera l'élément suivant de la liste i.e. 10 au premier appel, 15 au second, 25 au 3ème, 50 au 4ème, et on recommence avec 10 au 5ième appel.

    Puisque cette fonction n'a pas de paramètre, elle devra mémoriser quelque part l'indice du dernier élément retourné et l'incrémenter à chaque appel.

    Et c'est quelque chose que vous devriez avoir appris à faire lorsque vous avez étudié fonctions et portée des variables. Sinon, ouvrez un tuto. et réviser ces bases là car avec tkinter ce sont des préalables à avoir acquis.

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

Discussions similaires

  1. Warning: QObject::moveToThread: Cannot move objects with a parent
    Par L'elfe d'Azur dans le forum Multithreading
    Réponses: 1
    Dernier message: 28/09/2017, 16h24
  2. Aide fonction move Tkinter
    Par wazaato dans le forum Tkinter
    Réponses: 1
    Dernier message: 16/11/2015, 09h52
  3. [Aide] cURL Object moved to here.
    Par Tamkha dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/03/2015, 09h55
  4. [Python 3.X] Problème avec Tkinter: AttributeError: 'function' object has no attribute 'tk'
    Par Ziph0n dans le forum Général Python
    Réponses: 1
    Dernier message: 01/02/2015, 16h41
  5. [2.x] [Form] Upload d'image : Call to a member function move() on a non-object
    Par Elwood J. Blues dans le forum Symfony
    Réponses: 2
    Dernier message: 19/08/2012, 13h29

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