Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Créer une fenêtre en GTK ou Python


juddix

Messages recommandés

Bonjour,

 

je cherche a créer une fenetre pour une session utilisateur Linux.

cette fenetre a pour seule but, être un pense bete utilisateur.

 

j'ai bien essayé glade3, je fais la mise en forme puis j'enregistre le projet en fenetre.glade

<?xml version="1.0" encoding="UTF-8"?>
<interface>
 <!-- interface-requires gtk+ 3.0 -->
 <object class="GtkWindow" id="window1">
   <property name="visible">True</property>
   <property name="can_focus">False</property>
   <property name="title" translatable="yes">outils accesibilite</property>
   <property name="window_position">center</property>
   <child>
     <object class="GtkBox" id="box1">
       <property name="visible">True</property>
       <property name="can_focus">False</property>
       <property name="orientation">vertical</property>
       <child>
         <object class="GtkEntry" id="entry1">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">Utilisation des outils d'accesibilite:</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">0</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry2">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">1</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry3">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">inversion des couleurs Noir/Blanc = windows + n</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">2</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry4">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">changer de couleurs la fenêtre selectionner = windows + f</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">3</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry5">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">changer de couleurs toutes les fenêtres = windows + d</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">4</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry6">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">changer de filtre de couleurs = Ctrl + windows +s</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">5</property>
         </packing>
       </child>
       <child>
         <object class="GtkEntry" id="entry7">
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="invisible_char">●</property>
           <property name="text" translatable="yes">loupe = windows + molette souris</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">6</property>
         </packing>
       </child>
       <child>
         <object class="GtkButton" id="button1">
           <property name="label">gtk-close</property>
           <property name="visible">True</property>
           <property name="can_focus">True</property>
           <property name="receives_default">True</property>
           <property name="use_action_appearance">False</property>
           <property name="use_stock">True</property>
         </object>
         <packing>
           <property name="expand">False</property>
           <property name="fill">True</property>
           <property name="position">7</property>
         </packing>
       </child>
     </object>
   </child>
 </object>
</interface>

 

voila ce que je cherche...

juste créer une fenetre avec du texte.

 

Utilisation des outils d'accesibilite:

 

inversion des couleurs Noir/Blanc = windows + n

changer de couleurs la fenêtre selectionner = windows + f

changer de couleurs toutes les fenêtres = windows + d

changer de filtre de couleurs = Ctrl + windows +s

loupe = windows + molette souris

 

Comme vous l'avez comprit c'est une fenetre de rappel de raccourcit claviers de compiz pour des utilisateurs malvoyant.

 

si vous avec des idées où alternative a glade3, je suis preneur.

juste pour info je connais rien a tout ça... je débute la dedans.

Lien vers le commentaire
Partager sur d’autres sites

bon, j'ai réussi a me basant sur une fenetre de Ctkarch

 

// Released under the terms of the WTFPL, without any warranty.

#include <stdlib.h>
#include <gtk/gtk.h>
#include <unistd.h>
#include <string.h>

void launch(GtkWidget*, gpointer);

int main(int argc, char **argv)
{
GtkWidget *pWindow=NULL; // pointeur sur la fenetre
GtkWidget *pLaunch=NULL; // pointeur sur le bouton de lancement du doc.html
GtkWidget *pClose=NULL; // pointeur sur le bouton de fermeture
GtkWidget *pVbox=NULL; // pointeur sur le conteneur vertical contenant le texte de bienvenue et le conteneur des 2 boutons
GtkWidget *pHbox=NULL; // pointeur sur le conteneur horizontal contenant les 2 boutons en bas de la fenetre

GtkWidget *pTextView = NULL; // pointeur sur la vue du texte dnas la fenetre
GtkTextBuffer *pTextBuffer = NULL ; // pointeur sur le buffer du texte
GtkTextTagTable *pTagTable = NULL; // pointeur sur une table de tag
GtkTextTag *pTag = NULL; // pointeur sur le tag courant

GtkTextIter start, end; // defini le debut et la fin de la zone impacté par le tag

char *langue = NULL ; // permet de stocker la langue local
char *home = NULL ; // permet de stocker le repertoire HOME de l'utilisateur courant
char icone[100]; // defini le chemin de l'icone de l'appli

gtk_init(&argc,&argv); // initialisation

*icone='\0';

home=getenv("HOME"); // recuperation de la locale

if ( home == NULL ) // si la local n'est pas defini, on affiche une erreur
{
	GtkWidget* pError;
	pError = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,"Variable d'environnement $HOME non définie !");
	gtk_dialog_run (GTK_DIALOG (pError));
	gtk_widget_destroy (pError);
	exit(1) ;
}

strcpy(icone,home);
strcat(icone,"/.config/fbpanel/arch.png");

pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); // creation de la fenetre

gtk_window_set_default_size(GTK_WINDOW(pWindow),450,285); // definition de la taille de fenetre
gtk_window_set_icon_from_file(GTK_WINDOW(pWindow),icone,NULL); // definition de l'icone

pTagTable = gtk_text_tag_table_new(); // nouvelle table de tag. Necessaire pour la mise en forme
pTextBuffer = gtk_text_buffer_new (pTagTable); // creation du bugger. Va contenir le texte a afficher
pTextView = gtk_text_view_new_with_buffer (pTextBuffer); // creation de la vue du texte a afficher

// creation du tag pour la couleur de fond

pTag = gtk_text_tag_new("background-darkgray");
g_object_set ((gpointer) pTag, "background", "darkgray", NULL);
gtk_text_tag_table_add(pTagTable,pTag);

// creation du tag pour le gras du texte

pTag = gtk_text_tag_new("gras");
g_object_set ((gpointer) pTag, "weight", PANGO_WEIGHT_BOLD, NULL);
gtk_text_tag_table_add(pTagTable,pTag);

// creation du tag pour centrer le texte

pTag = gtk_text_tag_new("centrer");
g_object_set ((gpointer) pTag, "justification", GTK_JUSTIFY_CENTER, NULL);
gtk_text_tag_table_add(pTagTable,pTag);

gtk_text_view_set_right_margin(GTK_TEXT_VIEW(pTextView),5); // en pixel. Defini la marge a droite
gtk_text_view_set_left_margin(GTK_TEXT_VIEW(pTextView),5); // en pixel. Defini la marge a gauche
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(pTextView),FALSE); // n'affiche pas le curseur
gtk_text_view_set_editable(GTK_TEXT_VIEW(pTextView),FALSE); // desactive l'edition du texte
gtk_text_view_set_border_window_size(GTK_TEXT_VIEW(pTextView),GTK_TEXT_WINDOW_LEFT,10); // bordure de 10 pixels. Defini l'ecartement entre le bord de la fenetre et la zone de texte a gauche
gtk_text_view_set_border_window_size(GTK_TEXT_VIEW(pTextView),GTK_TEXT_WINDOW_RIGHT,10); // bordure de 10 pixels. Defini l'ecartement entre le bord de la fenetre et la zone de texte a droite
gtk_text_view_set_border_window_size(GTK_TEXT_VIEW(pTextView),GTK_TEXT_WINDOW_TOP,10); // bordure de 10 pixels. Defini l'ecartement entre le bord de la fenetre et la zone de texte en haut
gtk_text_view_set_border_window_size(GTK_TEXT_VIEW(pTextView),GTK_TEXT_WINDOW_BOTTOM,10); // bordure de 10 pixels. Defini l'ecartement entre le bord de la fenetre et la zone de texte en bas


langue=getenv("LANG"); // recuperation de la locale

if ( langue == NULL ) // si la local n'est pas defini, on affiche une erreur
{
	GtkWidget* pError;
	pError = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,"Variable d'environnement $LANG non définie !");
	gtk_dialog_run (GTK_DIALOG (pError));
	gtk_widget_destroy (pError);
	exit(1) ;
} 

if ( strstr(langue,"fr") != NULL ) // si la lange est FR, alors on affiche un texte en français
{
	gtk_text_buffer_set_text(pTextBuffer,"\nUtilisation des outils d'accesibilite\n\n inversion des couleurs Noir/Blanc = windows + n\n changer de couleurs la fenêtre selectionner = windows + f \n changer de couleurs toutes les fenêtres = windows + d\n\n changer de filtre de couleurs = Ctrl + windows + s \n loupe = windows + molette souris \n\n Pour avoir plus d’infos, cliquer sur le bouton Documentation. \n\n La Cellule réseau\n                  du Lundi au Vendredi de 9h à12 et de 14h à 17h\n \n\0",-1); // texte en FR
	pClose = gtk_button_new_with_label("    Fermer    "); // creation du bouton de fermeture en FR

		// mise en place de la mise en forme pour les raccourcis

	gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,3);
	gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,10,34);
	gtk_text_buffer_apply_tag_by_name(pTextBuffer,"gras",&start,&end);

	// mise en place de la mise en forme pour le plus d'infos

	gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,10);
	gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,10,62);
	gtk_text_buffer_apply_tag_by_name(pTextBuffer,"gras",&start,&end);
}
else // sinon en anglais
{
	gtk_text_buffer_set_text(pTextBuffer,"\nLive CTKArch 0.7\n\n Alt+F1 : Terminal \n Alt+F2 : Execute command \n Alt+F3 : File manager\n\n To configure a network connection, click the menu, Network, Wicd. \n An icon will appear on the bottom right of the screen. \n\n To get more info, click the Documentation button. \n\n Have a nice day !\n\0",-1);  // texte en En
	pClose = gtk_button_new_with_label("    Close    "); // creation du bouton de fermeture en En

	// mise en place de la mise en forme pour les raccourcis

	gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,3);
	gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,5,22);
	gtk_text_buffer_apply_tag_by_name(pTextBuffer,"gras",&start,&end);

	// mise en place de la mise en forme pour le plus d'infos

	gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,10);
	gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,10,51);
	gtk_text_buffer_apply_tag_by_name(pTextBuffer,"gras",&start,&end);

}

// mise en place du fond

//	gtk_text_buffer_get_bounds(pTextBuffer,&start,&end);
//	gtk_text_buffer_apply_tag_by_name(pTextBuffer,"background-darkgray",&start,&end);

// mise en place de la mise en forme pour le titre

gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,1);
gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,1,37);
gtk_text_buffer_apply_tag_by_name(pTextBuffer,"gras",&start,&end);
gtk_text_buffer_apply_tag_by_name(pTextBuffer,"centrer",&start,&end);


// mise en place de l'apparence pour le message de fin

gtk_text_buffer_get_iter_at_line(pTextBuffer,&start,12);
gtk_text_buffer_get_iter_at_line_offset(pTextBuffer,&end,12,18);
gtk_text_buffer_apply_tag_by_name(pTextBuffer,"centrer",&start,&end);

pLaunch = gtk_button_new_with_label("  Documentation  "); // creation du bouton

pVbox = gtk_vbox_new(FALSE,10); // creation du conteneur vertical
pHbox = gtk_hbox_new(TRUE,5); // creation du conteneur horizontal


gtk_window_set_title (GTK_WINDOW(pWindow), "Outils pour malvoyants"); // positionnement du titre de la fenetre
gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER); // positionnement de la fenetre sur l'ecran
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); // peremt de fermer la fenetre en cliquant sur la croix

g_signal_connect(G_OBJECT(pLaunch), "clicked", G_CALLBACK(launch),NULL); // lance la fonction "launch" quand on clique sur le bouton
g_signal_connect(G_OBJECT(pClose), "clicked", G_CALLBACK(gtk_main_quit),NULL); // quitte l'application si on clique sur le bouton

gtk_box_pack_start(GTK_BOX(pHbox), pLaunch, FALSE, FALSE, 0); // ajoute le bouton a gauche de la Hbox
gtk_box_pack_start(GTK_BOX(pHbox), pClose, FALSE, FALSE, 0); // ajoute le bouton a droite du 1er bouton

gtk_box_pack_start(GTK_BOX(pVbox), pTextView, FALSE, FALSE, 0); // ajoute le texte en haut de la Vbox

gtk_box_pack_start(GTK_BOX(pVbox), pHbox, FALSE, FALSE, 0); // ajoute la Hbox en dessous du texte

gtk_container_add(GTK_CONTAINER(pWindow), pVbox); // ajoute la Vbox dans la fenetre

gtk_widget_set_size_request(pLaunch,-1,26); // taille en pixels de la hauteur du bouton
gtk_widget_set_size_request(pClose,-1,26); // taille en pixels de la hauteur du bouton

gtk_widget_show_all(pWindow); // montre la fenetre

gtk_main(); // gere le clic sur les boutons

       return EXIT_SUCCESS;

}

void launch(GtkWidget *Widget, gpointer data) // fonction appelé pour lancer le contenu de la variable d'environnement BROWSER
{
pid_t   pid;

pid = fork (); // fork pour le lancement du browser

if (pid > 0)
{
	gtk_main_quit(); // en cas de process pere (process initiateur) on quitte pour rendre la main a la suite
}
else if (pid == 0)
{
	char *browser = NULL;
	char *langue = NULL ; 
	char fichier[100];

	*fichier='\0';

	browser=getenv("BROWSER"); // recuperation du contenu de la variable d'environnement BROWSER

	if ( browser == NULL ) // si variable non defini, on creer une boite de dialogue avertissant l'utilisateur que la variable n'est pas défini
	{
		GtkWidget* pError;
		pError = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,"La variable d'environnement $BROWSER n\'existe pas !");
		gtk_dialog_run (GTK_DIALOG (pError));
		gtk_widget_destroy (pError);
		exit(1) ;
	}

	langue=getenv("LANG");

	if ( langue == NULL )
	{
		GtkWidget* pError;
                       pError = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,"Variable d'environnement $LANG non définie !");
                       gtk_dialog_run (GTK_DIALOG (pError));
                       gtk_widget_destroy (pError);
                       exit(1) ;
	}

	if ( strstr(langue,"fr") != NULL )
	{
		strcpy(fichier,"/install/Documentation/fr.html");
	}
	else
	{
		strcpy(fichier,"/install/Documentation/en.html");
	}
	execlp(browser,browser,fichier,NULL); // on remplace le process fils par celui du browser (ecrasement)
}
else // si jamais, on ne peux pas forker
{
	GtkWidget* pError;
               pError = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE,"Impossible de forker !");
               gtk_dialog_run (GTK_DIALOG (pError));
               gtk_widget_destroy (pError);
               exit(1) ;
}
}

 

on compile avec

gcc $(pkg-config gtk+-2.0 --cflags) $(pkg-config gtk+-2.0 --libs) -Wall intro.c -o intro

 

on démarre avec:

BROWSER=firefox ./intro

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...