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 :

[débutant]gestion de deux masses


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut [débutant]gestion de deux masses
    bonjour,
    je débute dans python et j'ai pris comme support d'étude le tres bon ouvrage "apprendre à programmer avec PYTHON de gérard Swinnen
    ça va dans l'ensemble sauf a l'exo 8.13 gestion d'évenement

    En vous inspirant du pgm qui détecte les clics de souris dans un canvas, modifiez le pgm, choisissez l'astre par un bouton, puis cliquer sur le canvas pour que cet astre se positionne où l'on a cliqué
    Séparément pas de problème, la gestion du clic ou faire bouger un astre par event no souci
    J'en dirai pas autant des qu'il sagit de devoir choisir entre les astres
    ça fait plus de 2 heures que je suis dessus et je ne voix vraiment pas
    J'ai taper mon code comme ça mais je sais que je peux vraiment l'affiner en le découpant en créant certaines méthode....
    Merci d'avance
    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:utf-8 -*-
    from Tkinter import *
    from math import *
    #formule distance entre deux points     sqrt((x2-x1)**2+(y2-y1)**2)
    #formule force gravitationnelle (6.67*10**(-11))*masse1*masse2/distance**2
    #déplacement des astres
    def avance(event):
    	global x1,y1,x2,y2
    	global masse1,masse2
    	global astre
    	astre=astre1
     
    	if astre==astre1:
    		x1,y1=event.x,event.y
    		can.coords(astre1,x1,y1,x1+30,y1+30)
    	if astre==astre2:
    		x2,y2=event.x,event.y
    		can.coords(astre2,x2,y2,x2+40,y2+40)
     
     
    	Label(fen,text=astre,fg='green').grid(row=14,column=2)	
    	distance=sqrt((x2-x1)**2+(y2-y1)**2)
    	force=(6.67*10**(-11))*masse1*masse2/distance**2
    	#affichage de la distance entre les deux astres
    	Label(fen,text="Distance entre les deux astres: "+str(distance),fg='blue').grid(row=11,column=2)
    	#affichage de la force de gravitation
    	Label(fen,text="Force de gravitation entre les deux astres: "+str(force),fg='dark blue').grid(row=12,column=2)
    	Label(fen,text="Masse de l'astre 1: "+str(masse1)+" masse de l'astre 2: "+str(masse2)).grid(row=13,column=2)
     
    #gesdtionnaire d'événement astre 1	
    def astre1():
     
     
    def astre2():
     
     
     
    #varoable global 
    x1,y1=10,10
    x2,y2=20,20
    masse1=100
    masse2=250
     
    #pgm principal
    fen=Tk()
    fen.title("astre mouvant")
    #widget esclave
    can=Canvas(fen,width=400,height=400,bg='light grey')
    astre1=can.create_oval(x1,y1,x1+30,y1+30,fill='red',width=2)
    astre2=can.create_oval(x2,y2,x2+45,y2+45,fill='light yellow',width=2)
    can.grid(column=2,row=1,rowspan=10)
    can.bind("<Button-1>",avance)
    #bouton pour astre 1
    Button(fen,text="astre1",command=astre1).grid(column=1)
    Button(fen,text="astre2",command=astre2).grid(column=1)
    fen.mainloop()

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Par défaut
    Hello,

    Je suis le même cours que toi, mais j'en suis au chapitre 9.

    Pour ma part, j'ai mis mes deux astres dans une liste, ainsi que leurs coordonnées x et y, ce qui donne en gros dans mon def avance(event)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x[n], y[n] = event.x, event.y
    can1.coords(astre[n], x[n], y[n], x[n]+6, y[n]+6)
    + la mise à jour de l'affichage sur la distance et la force d'attraction

    Ensuite il ne reste plus qu'à créer deux procédures déclenchées par des boutons, une qui positionne "n" en global sur 0, l'autre qui positionne "n" en global sur 1, pour sélectionner l'astre à déplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def n0():
        global n
        n = 0
     
    def n1():
        global n
        n = 1
    Et voilà. A noter aussi que dans ton def avance(), tu crées à chaque fois de nouvelles instances de Label qui viennent écraser les précédentes. Une solution plus élégante serait, AMHA, de créer une seule fois les Label dans le prog principal, puis, dans la def avance(), de les mettre à jour en utilisant la méthode ".configure"

    Autre avantage de mettre les astres et leurs coordonnées dans des listes : l'exo suivant de demandera d'ajouter un troisième astre : il suffira d'ajouter un troisième membre dans tes listes !

    Bon courage pour la suite...

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/12/2005, 18h42
  2. [Delphi.Net] probleme de gestion de deux pages
    Par nivet dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 17/06/2005, 14h12
  3. [débutant] Comment regrouper deux tables ?
    Par maysa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/10/2004, 18h50
  4. Gestion de deux DBGRIDS
    Par sessime dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/05/2004, 12h47
  5. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 10h40

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