Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/11/2009, à 18:58

Mpok

Réaliser une interface graphique

Bonjour,

Préliminaire : j'avais besoin de faire des statistiques diverses à partir d'un fichier texte formatté d'une certaine manière. J'ai commencé par faire un petit script bash, mais j'ai rapidement été confronté à certains pbms qui m'ont fait prendre la décision de faire le prog en C, probablement plus adapté à ce que je voulais faire (encore que je suis certain que certains "pro" du bash auraient réussi). J'ai donc replongé dans mes souvenirs, et j'ai finalement réussi.. smile

Bref, je me retrouve maintenant avec un soft en ligne de commande, programmé en C, assez complet, et qui répond à mes besoins (bien plus que cela même, parce que forcément, j'ai rajouté au fur et à mesure plein d'options..). Mais maintenant, je me dis : "ça serait cool (et plus pratique) de rajouter une (petite) interface graphique".

Ma question : vu que je débute à ce sujet, par où commencer ?

J'ai fait quelques recherches dans la documentation ici-même, puis sur http://library.gnome.org/devel/
J'ai lu pas mal de choses intéressantes, mais j'en reste à ma question initiale...

Faut-il juste installer la bibliothèque GTK+ et commencer par le tutoriel ? (a priori la solution vers laquelle je me dirige)
Ou bien installer un ide comme Anjuta ? Ca me semble bien lourd, d'autant que le code "utile" est terminé, je veux juste rajouter une interface légère (une fenêtre, un menu, quelques boutons..) pour rendre la chose plus "user-friendly".
Ou bien une autre méthode que j'aurais zappé dans mes recherches ?

Hors ligne

#2 Le 22/11/2009, à 19:30

massyas

Re : Réaliser une interface graphique

Salut
Je suis pas un grand connaisseur, mais connais tu Glade. ca pourrait peut etre te permettre de faire une IHM rapidement à brancher ensuite sur ton code.
http://glade.gnome.org/
Glade is a RAD tool to enable quick & easy development of user interfaces for the GTK+ toolkit and the GNOME desktop environment.

Hors ligne

#3 Le 23/11/2009, à 19:56

Mpok

Re : Réaliser une interface graphique

@nodnod : Merci pour le lien !! smile  J'avais commencé par un autre tuto en anglais, mais celui-là en français est en effet très bien pour débuter. Le tuto en anglais étant plus complet (et les exemples sont différents), il est intéressant de suivre les deux en parallèle.
Et pour réaliser une interface simple, ça suffit bien (a priori, après une journée de travail pour l'instant).

@massyas : oui, j'ai bien vu glade. Il est clair que ça pourrait me faire gagner du temps dans la définition de l'interface (parce que là, je galère quand même un peu pour l'alignement des objets wink ). Mais, ce qui m'a gêné, c'est que j'ai trouvé des tuto sur comment utiliser le soft, mais pas grand chose sur comment "brancher sur mon code", comme tu dis. En gros, je me retrouve avec un fichier xml et après ? J'ai bien peur qu'il me faille quand même apprendre gtk+, donc j'ai pas poussé plus loin sur glade...

Hors ligne

#4 Le 23/11/2009, à 21:19

ADcomp

Re : Réaliser une interface graphique

si tu cherches un (de) bon(s) tuto(s) : http://www.zetcode.com/tutorials/gtktutorial/

A+


David [aka] ADcomp

Hors ligne

#5 Le 26/11/2009, à 07:25

Mpok

Re : Réaliser une interface graphique

@ADcomp : merci. Ce dernier lien n'apporte rien de nouveau sur le fond, mais les exemples de prog sont différents et plus complets, donc cela reste intéressant comme complément aux deux autres tutoriaux.

Grâce à vos différents liens à tous, mon interface avance bien... smile
Reste certains "détails" à peaufiner, et je pourrais attaquer la partie "connexion avec mon prog existant" (ce qui, globalement, devrait être assez simple : en gros, transformer les "printf" en "sprintf" pour un affichage dans un TextView...).

Globalement, ma découverte de la librairie GTK+ est plutôt positive : le concept de "box" (et l'arrangement automatique entre elles) est un peu déroutant au début, mais s'avère magique au redimensionnement lorsque tous les éléments sont placés. De même que le respect des thèmes utilisateurs par défaut.
Il y a en revanche certains désagréments liés à ces concepts :
- l'alignement précis des éléments n'est pas possible facilement (ce qui n'est pas bloquant à terme, juste "gênant" a priori..).
- il est difficile de "styliser" les éléments (et cela sort des différents tutoriaux). Là encore, je ne conteste pas le "parti-pris" (les éléments doivent respecter le style utilisateur), mais ce point est assez dérangeant (à première vue) du point de vue du développeur. Bon, je suppose qu'il s'agit d'une question d'habitude à prendre...

Dernière "petite gêne mineure" (côté développeur) : la déclaration des fonctions CallBack, qui génèrent quasi-systématiquement un warning "not used" sur le paramètre Widget. Et plus généralement, l'obligation de déclarer un grand nombre de widget en GLOBAL..

Hors ligne

#6 Le 26/11/2009, à 12:01

Karl_le_rouge

Re : Réaliser une interface graphique

Le problème avec Gtk+, c'est que c'est un toolkit orienté objet écrit dans un langage qui ne supporte pas nativement ce paradigme.
Certes, pour des petites applications, on peut se permettre une approche procédurale, mais la manière propre d'utiliser Gtk+, c'est d'adopter le modèle GObject.
Certes, c'est plus fastidieux mais tu as également la possibilité d'utiliser des langages de plus haut niveau comme C++, Python ou bien Vala (qui permet d'écrire du code directement réutilisable à partir du C !).

Dans ton cas, tu interfaces un soft en ligne de commande, peu importe le langage utilisé pour l'IHM. Selon la complexité de ton outil, un script bash + zenity ferait l'affaire.

Hors ligne

#7 Le 26/11/2009, à 13:23

tar_NeFyS

Re : Réaliser une interface graphique

petite remarque en passant, perl c'est magique pour traiter des fichiers textes formatés

Hors ligne

#8 Le 27/11/2009, à 12:04

Mpok

Re : Réaliser une interface graphique

Karl_le_rouge a écrit :

Le problème avec Gtk+, c'est que c'est un toolkit orienté objet écrit dans un langage qui ne supporte pas nativement ce paradigme.

Ouais, tout à fait Karl.. Je crois que tu as bien résumé le "problème" (qui n'en est pas vraiment un, au final, puisqu'on s'adapte...).
Quant à apprendre un autre langage, non merci, je vais rester au C roll (il a déjà fallu que je me replonge dedans, après environ 10 ans d'inactivité dans ce domaine, et cela n'a pas été simple crois-moi... Les premiers jours ont été remplis d'erreurs de compilation ou de "segmentation fault" à l'exécution... wink)
Note : zenity (que je découvre grâce à toi) n'est PAS une solution dans ce cas..

@nodnod : si tu arrives à ne rien déclarer en global, c'est que tu as de la chance, ou que ton interface est vraiment très simple (ou que tu es vraiment très fort.. wink). Mon expérience de GTK+ est certes limitée (5 jours..), mais pour l'instant la solution "déclarer en global" est quand même la plus facile (même si ce n'est pas conseillé, et c'est pour cela que je ne suis pas satisfait). Quand une action sur un *Widget demande la modification d'un AUTRE *Widget (et ce cas arrive fréquemment), il faut bien avoir déclaré l'autre widget en global... Dans certains cas, on peut passer par le paramètre Data de la fonction callback, mais pas toujours (parce que ce paramètre est déjà utilisé pour autre chose).
En gros, pour être explicite, il faudrait juste que les fonctions "callback" admettent un nombre variable de paramètres, et là le problème serait résolu. Mais ce n'est pas le cas..

@tar_NeFyS : certainement... Lorsque j'ai choisi de passer au C plutôt que bash (cf. post initial), j'aurais dû penser à Perl, bonne remarque. Mais c'est trop tard. Maintenant le soft est en C.

Hors ligne

#9 Le 28/11/2009, à 20:50

Ph3nix_

Re : Réaliser une interface graphique

Traitement de fichier formatée = hawk (et pas Perl et encore moins le C)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#10 Le 29/11/2009, à 14:31

Mpok

Re : Réaliser une interface graphique

@Ph3nix_ : si tu parles du classique 'awk', alors NON, pas du tout.. Le "problème" des outils classiques (awk, grep, sed et j'en passe) est qu'il sont conçus pour le "ligne à ligne". Dès que l'on veut gérer des enregistrements sur plusieurs lignes, c'est la galère...
Dans ce cas, Perl est meilleur puisqu'il propose des fonctions plus avancées (de même que C) sur le parsing multi-lignes.

@all : mon "petit" programme d'interface est "quasi" terminé...
... sauf que je ne l'ai pas encore "connecté" avec mon soft existant en ligne de commande.
Pour cela, je me suis dis que "tant qu'à faire autant me former jusqu'au bout"..
Donc au lieu de mixer mes deux sources (un pour l'interface, inactif pour l'instant, et un pour le mode console, fonctionnel), j'ai décidé de séparer les sources en plusieurs fichiers (c'est pas plus mal) et de faire un Makefile correct.
Et donc (toujours sur le principe "apprenons..."), d'utiliser les autotools..

Oùlà...
Autant j'ai été plutôt satisfait de ma découverte de GTK+, autant j'ai été plutôt déçu de l'usine à gaz des autotools (autoconf, automake, etc..).
Bon, là encore, je débute (hier), donc ce n'est peut-être pas représentatif.
Mais sans déconner : pourquoi n'y a-t-il pas un SIMPLE outil (graphique de préférence) pour gérer TOUT CA simplement ?
Genre : on sélectionne ses fichiers sources et zou !!
C'est quand même pas difficile à faire (au moins pour des projets simples).
Je ne dirai rien sur la taille des fichiers générés (qui au total représentent presque autant que mes sources.. LOL), mais sur L'UTILISATION, un soft (à la rigueur un script) EST NECESSAIRE pour gérer ça (surtout pour les débutants comme moi).
D'autre part, je n'ai pas (encore) trouvé comment appliquer des options de compilations SPECIFIQUES A CERTAINS FICHIERS... Pour l'instant, je modifie CFLAGS à la main dans le Makefile et ça marche, mais c'est évidemment une MAUVAISE méthode. Pourquoi automake n'a-t-il pas déterminé 'automatiquement' que certains fichiers devaient avoir les options de compilation GTK ??

Hors ligne

#11 Le 29/11/2009, à 21:15

kevlar

Re : Réaliser une interface graphique

@mpok ; il existe une contorsion pour un nombre multiple de variables dans les callbacks, qui consiste à passer dans la zone DATA un pointeur sur un tableau ou un pointeur sur une structure.

Hors ligne