Forum Programmation.perl Tutoriel pour utiliser glade et perl

Posté par  (site web personnel) .
Étiquettes : aucune
0
12
nov.
2008
Salut, salut!


Alors voila, tout le monde se plaint que pour uploader des fichiers au wiki de culture libre (mediawiki), c'est chiant si on veut uploader tout un lot de photo par exemple. Après avoir fait un tour de l'existant, je décide de faire une petite interface d'upload à mediawiki en utilisant la lib[1] perl qui va bien.

Et comme dans mes livres perl j'ai appris que la paresse est une vertu, j'ouvre directement glade et commence à jeter des libellés par-ci des boîtes de textes par là, en saupoudrant d'autres éléments gtk.


Seulement je n'ai pas trouvé de tutoriel pour utiliser cette interface avec perl. Un petit coups de perldoc me fait pondre :

#!/usr/bin/perl
#
use Gnome2;
use Gtk2::GladeXML;

Gnome2::Program->init("test","1.0");

my $gladexml= Gtk2::GladeXML->new('mmu-gtk.glade');
$gladexml->signal_autoconnect_from_package('window1');
Gtk2->main();


Avec bien sûr mmu-gtk.glade étant mon fichier glade, qui contiens bien une fenêtre nommé window1.

Quand je lance mon petit programme qui n'est pas encore censer faire grand chose, je me vois gratifier du message suivant :

% ./test.pl
Gtk-CRITICAL **: gtk_widget_grab_default: assertion `GTK_WIDGET_CAN_DEFAULT (widget)' failed at ./test.pl line 8.


Voilà, si vous avez des idées ou de la documentation à me conseiller, je suis preneur. :)

[1] http://search.cpan.org/dist/MediaWiki/lib/MediaWiki.pm
  • # Liens utiles

    Posté par  . Évalué à 1.

    Un tutoriel :

    http://live.gnome.org/GTK2-Perl/GladeXML/Tutorial

    Un autre outil de téléchargement multiple d'images :

    http://commons.wikimedia.org/wiki/Commons:Tools/Commonist
    • [^] # Re: Liens utiles

      Posté par  (site web personnel) . Évalué à 2.

      Salut!

      Merci pour ta réponse. En fait j'avais fini par trouver ce tuto (via perldoc tout simplement) et bien que l'ayant fait, je galère encore un peu. Notamment pour la gestion de plusieurs fenêtre. Par exemple en disant que $about_window contiens la référence de ma fenêtre "à propos", lors de la première capture de l'événement "activation du bouton aide>à propos", ma fenêtre appraraît bien sans problème, grace à un $about_window->show. Si je la ferme et que je recommence, seul la barre d'état (je suis pas sûr du nom, la barre du dessus des fenêtres) de la fenêtre apparaît sur un espace très réduit. Une idée ?

      J'avais trouvé commonist mais je n'ai pas réussi à le faire fonctionner, mais merci quand même.
      • [^] # Re: Liens utiles

        Posté par  . Évalué à 1.

        Si tu fermes la fenêtre, elle est détruite en mémoire, coup si tu réutilises la fonction show, ça n'affiche que les objets qui auraient survécu. Pour une simple fenêtre d'à propos, je fais ça à la main dans le code.

        my $window1 = $gui->get_widget ("window1") ; # la fenêtre principale
        ...
        sub A_propos {
        my $texte = "Ceci est une boite d'information\nMerci d'utiliser ce logiciel" ;
        my $dialog = Gtk2::MessageDialog->new ($window1, [qw/destroy-with-parent/], 'info', 'ok', $texte) ;
        $dialog->run ;
        $dialog->destroy () ;
        }

        Si tu veux utiliser glade pour faire une interface plus élaborée, tu peux sans doute sauvegarder tes fenêtres dans des fichiers séparés et les recharger lorsqu'ils sont détruits. ($gui = Gtk2::GladeXML->new ('test.glade') ;)
        • [^] # Re: Liens utiles

          Posté par  (site web personnel) . Évalué à 2.

          Je ne peux pas simplement capturer l'événement "fermeture de la fenêtre nom_fenêtre" et demander de ne pas la détruire mais la cacher ?

          Merci pour tes conseils en tout cas. :)
          • [^] # Re: Liens utiles

            Posté par  . Évalué à 1.

            J'ai aussi tenté mais sans succès :-(. Apparemment X est le plus fort et détruit toujours la fenêtre après exécution de la routine appelée par l'évènement. Mais bon je ne suis pas professionnel et There is more than one way to do it.

            Et juste pour répondre à la question intiale, des fois que ça soit utile à l'avenir à quelqu'un d'autre, la syntaxe est :

            $gladexml->signal_autoconnect_from_package(nom de package);
            nom de package est le nom de son package à soi où on a rangé les routines appelées par les signaux. Si la fonction est appelée sans argument, les signaux renvoient au programme courant (ce qui est le comportement souhaité pour les petits programmes).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.