Documentation de la classe TkPhotoImage

Pour écrire des interfaces graphiques en Ruby, on a le choix : Shoes, FxRuby, wxRuby, ruby-GNOME2, RubyQt et j’en passe… Malgré cela, le seul toolkit inclus avec la majorité des distributions de Ruby (comme pour Python) est le mal-aimé Tcl/Tk.

J’avoue une tendresse particulière pour ce toolkit « ancestral », qui permet de réaliser des prototypes simplement et rapidement. Le grand problème de Tk avec Ruby, outre son look toujours affreux sur beaucoup de machines, c’est l’absence de documentation spécifique.

Pour un projet, j’avais besoin d’utiliser la classe TkPhotoImage, qui manipule des images couleurs. Regardez donc la page de documentation du binding Ruby consacrée à cette classe : http://ruby-doc.org/stdlib/libdoc/tk/rdoc/classes/TkPhotoImage.html
Pas une seule ligne ! Rien ! Nada !

Comme j’ai déjà utilisé Tk, soit avec Tcl, soit avec Python, ce n’est pas un problème insurmontable. En lisant la source de la classe TkPhotoImage et la documentation de Tcl/Tk sur le sujet (http://www.tcl.tk/man/tcl8.4/TkCmd/photo.htm), j’ai pu m’en sortir assez rapidement. Mais j’imagine facilement que quelqu’un n’ayant jamais utilisé Tk ne retrouvera pas ces petits.

Voici donc un début de documentation de la classe TkPhotoImage.

new

Créer une image vide, avec une hauteur et une largeur en pixels.


destination = TkPhotoImage.new(:height => 200, :width => 200)

Créer une image à partir d’un fichier.


source = TkPhotoImage.new(:file: => 'mon_image.png')

blank

Supprimer le contenu (les pixels) d’une image.


destination.blank

cget

Retrouver une information (ici le nom du fichier).


puts source.cget :file

copy

Copier toute l’image source dans l’image de destination, à la position 0,0.


destination.copy(source)

to

Copier toute l’image source dans l’image de destination, à la position 30, 40.


destination.copy(source, :to => [30, 40])

Copier une partie de la source dans destination, dans une région dont 30, 30 est le coin supérieur gauche et 40, 40 le coin inférieur droit. Si la source est trop petite pour remplir la région concernée, celle-ci [la source] est répétée autant de fois que nécessaire.

destination.copy(source, :to => [30, 30, 40, 40])

zoom

Copier toute l’image source dans l’image de destination, en zoom la source d’un facteur 2 dans les deux sens.


destination.copy(source, :zoom => 2)

Copier toute l’image source dans l’image de destination, en zoom la source d’un facteur 2 en largeur et de 3 en hauteur.


destination.copy(source, :zoom => [2, 3])

Exemple d’utilisation


require 'tk'
# Pour utiliser toute sorte de format d'image.
require 'tkextlib/tkimg'

root = TkRoot.new do
  title "Test"
  minsize(200, 200)
end

# Création d'une image conteneur et chargement d'une image texture.
container = TkPhotoImage.new(:height => 200, :width => 200)
texture = TkPhotoImage.new(:file => 'ecorce.jpg', :height => 96, :width => 96)

# Une image s'affiche dans un label.
label = TkLabel.new(root).pack
label.configure(:image => container)

# Remplissage du conteneur avec la texture.
container.copy(texture, :to => [0, 0, 199, 199])

Tk.mainloop

Résultat :

Références

http://www.tkdocs.com

http://www.tcl.tk/

Publicités

, ,

  1. Poster un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :