Bonjour,

Je poursuis dans mes demandes de noob. Je me casse la tête pour faire une application avec PyGTK et Cairo affichant une trace de la trajectoire prise par la baballe.
Un truc simple avec Tkinter carrément invraisemblable avec Cairo.
Pour l'instant, j'arrive afficher la balle et lui faire suivre une trajectoire droite (pour l'exemple). Pour l'animation, je crée un cercle, j'attend quelques millièmes de secondes, j'efface, je redessine mon cercle un peu plus loin et ainsi de suite.

Ensuite, je crée un petit rectangle dont je veux me servir pour tracer la trajectoire. A un instant T, je place un petit rectangle correspondant à la position actuelle du centre de la balle, T+1 idem, T+2 ... et ainsi de suite jusqu'à T+N. La succession de tous les points formant la trajectoire suivie.

Problème, quand j'efface mon cercle, il me vire mes points et du coup, pas de trajectoire à afficher.

Autre remarque, lorsque je lance ma boucle, le bouton déclenchant ma fonction reste enfoncé et je ne peux plus rien faire tant que la boucle effectuant l'animation n'est pas fini. Est-ce dans ce genre de cas que je dois utiliser le module "threading" de Python?

Si une âme charitable voulais bien m'orienter dans la bonne direction, je lui en serait très reconnaissant parce que là, je vais devenir dingo!!!
Merci d'avance.

Ci-dessous, un extrait de code de ce que je veux faire.

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
# *-*coding:Latin-1*-*
 
# Afficher un damier et des pions de maniere aleatoire
# Importation des modules
import gtk
from math import pi
from random import randrange
from time import sleep
 
# Fonctions    
 
def balle(widget, data, taille):
    "Test balle"
    x = 0
    y = 50
 
    cr = data.window.cairo_create()
 
    while x<200:
        #ligne(cr, data, x ,y)
        cr.rectangle(x, y, 1, 1)
        cr.stroke_preserve()
        cr.save()
 
        cr.set_source_rgba(0.9,0.4,0.3,0.5)
        cr.arc(x, y, taille/2, 0, 2*pi)
        cr.fill()
 
        sleep(0.005)
        cr.set_source_rgba(1.0,1.0,1.0,1)
        cr.paint()
        cr.restore()
        x += 1
 
 
# Definition des variables
taille = 25
 
 
# Interface
# Fenetre principal
window = gtk.Window()
window.set_resizable(False)
window.set_border_width(12)
window.set_position(gtk.WIN_POS_CENTER)
window.connect("destroy", gtk.main_quit)
 
# Definition des boites
vbox = gtk.VBox(homogeneous = False, spacing=3)
hbox = gtk.HBox(homogeneous = True, spacing=3)
 
# Definition de la zone de dessin
dessin = gtk.DrawingArea()
dessin.set_size_request(taille*10, taille*10)
 
# Definition des boutons
button1 = gtk.Button(label="Tracer")
button1.set_size_request(50, 30)
button1.connect("clicked", balle, dessin, taille)
 
button2 = gtk.Button(label="Quitter")
button2.set_size_request(50, 30)
button2.connect("clicked", gtk.main_quit)
 
# Packing et affichge de l'interface
hbox.pack_start(button1, expand=False, fill=True, padding=3)
hbox.pack_start(button2, expand=False, fill=True, padding=3)
 
vbox.pack_start(dessin, expand=False, fill=False)
vbox.pack_start(hbox, expand=False, fill = False)
 
window.add(vbox)
window.show_all()
gtk.main()
J'en profite également pour demander autre chose sans rapport direct. Mais j'ai vu plusieurs extraits de code où l'on voit apparaître une petite étoile dans la liste des arguments d'une fonction, qu'est-ce que cela veut dire?
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
self.dim = (w, h)
        self.set_size_request(*self.dim)
tel que représenté ci-dessus, je m'aventure à dire que l'on passe en argument w et h contenu dans self.dim
En codage noob, j'aurai écris:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
self.set_size_request(w, h)
Y a-t-il un autre intérêt, ai-je bien compris le truc ou je suis complétement à coté de la plaque?!

Et pour finir : JOYEUX NOEL à tous !!!!