gribouilli, pour laisser vos (petits) enfants taper sur votre clavier
Il y a presque trois ans que j’ai fait gribouilli
(grabouilla
ça faisait moins classe, et grybouilly
, trop python. Pas facile de trouver un nom de programme…). C’est un petit programme qui se met en plein écran et qui affiche des formes géométriques et des images à l’écran lorsque l’on appuie sur les touches du clavier ou que l’on clique sur les boutons de la souris (et qui trace des lignes quand on bouge la souris).
De temps en temps, mon fils me demande s’il peut y « jouer ». Pour être franc, ce qui lui plaît c’est surtout qu’à chaque fois que l’on appuie sur une touche, il y a aussi un son qui est joué. Depuis qu’il a découvert monsieur patate (KTuberling) puis GCompris, il y joue beaucoup moins, mais cette semaine, il me la redemandé. Je me suis dit : « tiens, et si ça pouvait profiter à d’autres ? » Oui, c’est un peu prétencieux, mais si ça sert à une personne, ça me fera plaisir !
Il ne faut pas trop s’apesantir sur la qualité du code, il a beaucoup évolué, sans que je revienne dessus : d’abord que des formes, puis du son, puis des images qui correspondent éventuellement au son… Du coup, on voit quelques bouts de code qui gagneraient à être factorisés, mais c’est du temps que je préfère passer à écrire cet article ;]
J’ai pas tellement de plan pour cet article, on va donc sans transition, passer aux fonctionnalités :
Fonctionnalités
- se met en plein écran
- joue un son aléatoire à chaque appui de touche (dans le dossier
sounds
) - affiche une forme ou une image à chaque appui de touche (dans le dossier
images
) - si un nom de fichier image correspond plus ou moins au nom de fichier son joué, c’est cette image qui est affichée (par exemple si c’est
dog_2.wav
qui est jouée, alorsdog_4.png
peut être affichée (mais pascat_2.svg
)) - une combinaison de touche pour quitter (à modifier dans le code si elle ne vous plait pas :þ)
- une combinaison de touche pour tout supprimer
- la souris trace des traits
- les boutons affichent les formes/images
Défauts
- la longueur des mots pour nettoyer/quitter est identique (le code pour nettoyer est venu après)
- il faut faire attention à ce que verr.maj. ne soit pas enclenché pour nettoyer/quitter (et que le raccourci pour passer du clavier azerty vers le bépo non plus…)
- pas vraiment du plein écran sur certains windows manager (comme awesome-wm). Je n’ai pas trop cherché pourquoi.
- je n’ai pas bloqué les touches multimédia, y compris concernant le son… et plein de sons d’animaux, trop fort, c’est trop fort…
Conclusion
Voilà, pas grand chose à dire, si ce n’est que c’est sur bitbucket, et que j’ai inclus un script qui télécharge des sons sur http://soundbible.com/ (normalement un wget -r -nd -A.mp3
est suffisant, mais là il n’y a pas les liens directement sur les fichiers, du coup, il faut tricher un peu). Ah, si, il faut installer python-qt4-phonon
pour que cela fonctionne.
Très rapidement, pour jouer un son avec phonon
from PyQt4.phonon import Phonon ... self.m_media = Phonon.MediaObject(self) audioOutput = Phonon.AudioOutput(Phonon.NotificationCategory, self) Phonon.createPath(self.m_media, audioOutput) def play(self): fic = QtCore.QString("/tmp/myfile.mp3") if (QtCore.QFile(fic).exists()): self.m_media.setCurrentSource(Phonon.MediaSource(fic)) self.m_media.play()
Et pour coller une image, c’est encore plus simple :
qp = QtGui.QPainter() img = QtGui.QImage() img.load("/tmp/mypic.jpg") qp.drawImage(x, y, img)
J’ai bien utilisé os.path.join
et os.getcwd
mais je n’ai pas autre chose que du GNU/Linux à la maison, donc je ne sais pas si ça marche sur autre chose, mais ça devrait !
À la prochaine.