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 :

mouvement d'un item canvas: Vos avis , usages, conseils vis à vis de after() vs Timer() [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut mouvement d'un item canvas: Vos avis , usages, conseils vis à vis de after() vs Timer()
    Bonjour,

    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
     
    from tkinter import *
    from threading import Timer
     
    def moveTimer(event):
        dx=5
        dy=5
        can.move(rect, dx, dy)
        dx+=2
        dy+=2
        timer = Timer(0.05, lambda: moveTimer(event))
        timer.start()
     
    def moveAfter(event):
        dx=5
        dy=5
        can.move(rect, dx, dy)
        dx+=2
        dy+=2
        can.after(50, lambda: moveAfter(event) )
     
    width=400
    height=400
    x=0
    y=0
     
    fen = Tk()
    can = Canvas(fen, width=width, height=height, bg="black")
    can.grid()
    rect = can.create_rectangle(x+5,y+5,x+25, y+25, fill="ivory")
    can.bind("<Button-1>", moveTimer)
    can.bind("<Button-3>", moveAfter)
    fen.mainloop()
    Que diriez-vous à un débutant cherchant à créer un mouvement d'un item sur un canevas?
    D'utiliser plutôt un truc ressemblant à la fonction moveTimer() ou un truc style moveAfter() ou une autre technique plus adaptée?
    Autrement dit: Quelles sont les différences d'usages qui permettent de s'orienter vers une technique de mouvement plutôt qu'une autre?

    (Pour le reste, n'hésitez à corriger, commenter, (voire défoncer l'auteur), sur toute erreur (de fond et/ou de forme) du "code-exemple" ci-dessus)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    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 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Salut,

    Pour vous l'expliquer, il faudrait vous raconter ce que sont multi-tache coopératif et multitâche pré-emptif. Puis raconter ce qu'une bibliothèque graphique vient à faire la dedans et les difficultés à la faire coexister avec des threads.

    Ce qui prendrait des plombes à écrire sans que cela vous aide (il y a des tas de bouquins la dessus).

    Pour faire simple, on dira qu'il ne faut pas modifier la partie graphique directement depuis un threads (et que vous utilisez .after).

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

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 863
    Points : 1 511
    Points
    1 511
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Sinon pour la forme,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def moveAfter(event=None):
        dx=7
        dy=7
        can.move(rect, dx, dy)
        can.after(50, moveAfter)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  4. #4
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,
    Sinon pour la forme...
    Merci

  5. #5
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    ..(il y a des tas de bouquins la dessus).
    Pour faire simple, on dira qu'il ne faut pas modifier la partie graphique directement depuis un threads (et que vous utilisez .after).
    - W
    Re,
    merci pour votre réponse W.
    Donc si on veut suivre le "pour faire simple" vous conseilleriez d'utiliser .after() ..c'est ça?
    Auriez-vous une ref de bouquin à conseiller pour se familiariser avec les notions que vous avez évoquées?
    Encore merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 240
    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 240
    Points : 36 696
    Points
    36 696
    Par défaut
    Citation Envoyé par Jma06 Voir le message
    Donc si on veut suivre le "pour faire simple" vous conseilleriez d'utiliser .after() ..c'est ça?
    Voilà.

    Citation Envoyé par Jma06 Voir le message
    Auriez-vous une ref de bouquin à conseiller pour se familiariser avec les notions que vous avez évoquées?
    Non. Mais vous pouvez déjà tirer un peu les fils de l'article wikipedia sur le multitache.

    La difficulté est que çà ne va pas vous permettre de comprendre grand chose de concret avant longtemps.

    Vous pourrez programmer sans problème avec tkinter sans trop savoir le pourquoi du comment en vous appliquant à suivre les quelques règles qui en découlent.

    Par exemple, prenez la documentation d'update:
    Cette méthode force le rafraîchissement de l’affichage. Vous ne devriez l’utiliser que si vous savez ce que vous faites puisqu’elle peut conduire à un comportement imprévisible ou à une boucle infinie. Dans tous les cas, elle ne devrait jamais être appelée à partir d’un gestionnaire d’événement ou d’une fonction appelée par un tel gestionnaire.
    Vous vous appliquez à faire ce que çà dit.

    Si vous savez ce qui fait fonctionner le multitâche coopératif, vous comprenez le pourquoi de ces précautions et quand l'utiliser.

    Mais à la fin de la journée, vous aurez écrit autant de lignes de code.

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

  7. #7
    Membre régulier
    Homme Profil pro
    Amateur débutant
    Inscrit en
    Décembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur débutant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 88
    Points : 104
    Points
    104
    Par défaut
    Merci - W

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2011, 09h34
  2. Vos avis et conseils sur mon site Toners Laser France
    Par Noukito dans le forum Mon site
    Réponses: 0
    Dernier message: 07/01/2010, 17h24
  3. Vos avis et conseils sur http://www.vtuning.net
    Par vtuning.net dans le forum Mon site
    Réponses: 4
    Dernier message: 07/07/2007, 20h16
  4. [CV]Vos avis et conseils
    Par guizzmo dans le forum CV
    Réponses: 13
    Dernier message: 25/06/2007, 09h50
  5. Vos avis et conseils sur site pro bâtiment svp
    Par rachid31 dans le forum Mon site
    Réponses: 19
    Dernier message: 23/03/2007, 12h47

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