Derniers journaux de Yusei :
- [29/12@16:10] Wikipedia a besoin d'arge... ah ben non, c'est fini.
- [11/09@15:38] De la lecture libre ?
- [25/08@07:46] Manifestation en ligne contre les brevets logiciels (c'est suivi ?)
- [23/08@07:28] Le deuxième effet LinuxFR (Google related)
Journal : Tutoriel Ruby/GTK
Posté par Yusei () le 16 mai 2004Un jour on m'a demandé des "cours" de programmation en Ruby, et en particulier comment faire des interfaces graphiques. Alors, pendant que j'y suis, je les tape et je les met sur mon site, en espérant que ça serve à des gens.
La première partie est ici, si vous avez des commentaires ou suggestions:
http://yusei.ragondux.com/informatique_documentation_ruby-gtk.html(...)
Ça n'apprendra rien à ceux qui connaissent déjà GTK pour d'autres langages, mais ça donne un aperçu de la manière de faire "à la Ruby", et ça réunit des informations que j'ai parfois dû aller chercher dans le code source, ou par tests successifs.
La première partie présente juste les bases, et par la suite je pense traiter les autres widgets fondamentaux (panneaux à onglets, barres d'outils et de menu...), puis l'ensemble de classes pour faire des arbres/listes, et enfin l'accessibilité. D'autres idées ?
> Lire le journal (7 commentaires, moyenne: 3,1).
Ce que je cherchais..
Super, je cherchais une doc de ce style en français, tout d'abord pour python mais je pense pas qu'il y ai bcp de différences entre ces deux langages.
J'espère que tu le metteras à jour comme tu le dis.
-
[^]Re: Ce que je cherchais..
Posté par Bader Ladjemi (page perso, ) le 17/05/2004 à 09:54. (lien). Évalué à 0.euhh si quand même deux trois grosses différences, mais bon passont.
Pour PyGTk y a:
http://philoulaloutre.free.fr/tutorielpygtk/index.html(...) [fr]
http://www.daa.com.au/~james/software/pygtk/(...) [en]
Sinon pour faire des interfaces rapides et assez simple y a l'excellent:
zenity
Glade
Premier point: il est bien ton article, bravo, et vivement la suite :)
Deuxième point: tu n'abordes pas du tout l'utilisation de glade pour la création de l'interface. Comptes-tu le faire par la suite ? Parceque c'est vraiment pas mal du tout, plus simple et plus léger en code. Sur le sujet, j'avais vu ce tutoriel au fosdem qui était sympa : http://ruby-gnome2.sourceforge.jp/hiki.cgi?FOSDEM_2004(...)
(les slides sont un peu courts parceque tout était fait en direct live pour de vrai, autant les clics clics dans glade que l'écriture du code, mais l'archive du source final est dispo)
-
[^]Re: Glade
Posté par Yusei () le 16/05/2004 à 10:28. (lien). Évalué à 5.En fait je n'ai pas parlé de Glade parce qu'il ne gère pas de code Ruby... et je n'avais pas pensé à libglade, bêtement :-)
Je vais regarder ça, quand j'aurai couvert les sujets dont je parle dans le journal, merci.-
[^]Re: Glade
Posté par tgl () le 16/05/2004 à 14:42. (lien). Évalué à 6.Pour ceux qui veulent voir rapidos la différence, voilà en gros l'équivalent de ton code en version libglade:
http://tdegreni.free.fr/ruby/convertisseur-glade.rb(...)
http://tdegreni.free.fr/ruby/convertisseur.glade(...)
(Je n'ai gladisé que la fenêtre principale. Pour le dialogue de résultat, je trouve plus simple la création manuelle, vu que c'est de toute façon un dialogue standard.)
-
[^]Re: Glade
Posté par Laurent Sansonetti (page perso, ) le 22/05/2004 à 09:16. (lien). Évalué à 1.Pour générer du code Ruby à partir d'un .glade regarde le programme ruby-glade-create-template.
Bravo pour ton tutoriel!
-
glade
Salut,
superbe doc ! J'ai posté un message sur alt.fr.comp.lang.gtk+ qui montre quelques lignes de codes ruby (pompé dans alexandria, http://alexandria.rubyforge.org/(...)) sur l'utilisation de la libglade, si ça peut t'aider pour ta doc :
Message-ID: <pan.2004.05.14.23.31.08.763187@taonix.net>
Je colle ici le code pour ceux qui ne peuvent accéder à alt* :
Une classe de chargement du fichier Glade que voici :
class GladeBase
def initialize(filename, root)
file = File.join(Geekast::Config::DATA_DIR, 'glade', filename)
glade = GladeXML.new(file, root) { |handler| method(handler) }
glade.widget_names.each do |name|
begin
instance_variable_set("@#{name}".intern, glade[name])
rescue
end
end
end
end
Ensuite tu créés une classe qui hérite de GladeBase ou tu vas lire ton
fichier glade, exemple :
class CallbackPref < GladeBase
def initialize
super("geekast.glade", "geekast_setting")
end
def on_pref_cancelbutton_clicked(widget)
@geekast_seeting.destroy
end
end
"super" transfère les paramètres donnés à la méthode de la classe
mère, donc ici la méthode initialize de GladeBase. Le 2ème paramètre
est le widget racine (une GtkDialog ici).
L'astuce de la classe GladeBase c'est qu'elle extrait chaque widget du
fichier glade (à partir du noeud racine) via glade.widget_names.each et
quelle instancie chaque widget ensuite via instance_variable_set.
Donc le widget nommé toto sera accessible dans ton prog Ruby via @toto.
D'ailleurs tu le vois dans ma méthode on_pref_cancelbutton_clicked qui
détruit la dialog geekast_seeting via la méthode destroy.
Très simple et très efficace. Par rapport au code de alexandria j'ai
juste ajouté le paramètre root, car le Laurent, le dev, créé un projet
glade par fenêtre ! (perso j'aime pas trop ça).
Les journaux sont destinés à des informations qui ne sont pas suffisamment intéressantes
pour être validées en dépêche (sinon n'hésitez pas à proposer votre information en
dépêche), qui sont sans rapport avec Linux ou le libre, ou simplement pour donner votre
avis. Si vous désirez poser une question, merci d'utiliser 

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.