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.
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?
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()
Exemple:
tel que représenté ci-dessus, je m'aventure à dire que l'on passe en argument w et h contenu dans self.dim
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 self.dim = (w, h) self.set_size_request(*self.dim)
En codage noob, j'aurai écris:
Y a-t-il un autre intérêt, ai-je bien compris le truc ou je suis complétement à coté de la plaque?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.set_size_request(w, h)
Et pour finir : JOYEUX NOEL à tous !!!!
Partager