IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ Discussion :

Créer une slide bar qui occupe toute la largeur de ma fenetre


Sujet :

GTK+

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Créer une slide bar qui occupe toute la largeur de ma fenetre
    Bonjour (ou re bonjour, vu que je post pas mal en ce moment ^^)

    Je continue le développement de mon interface graphique avec GTK3.
    Je souhaiterais essayer de reproduire cela :

    Nom : source.png
Affichages : 659
Taille : 75,0 Ko

    L'objectif c'est d'avoir une sorte de header ou je vais disposer plein de boutons horizontalement. Je souhaiterais que mon header prenne toute la longueur de mon interface graphique (qui aura une taille fixe). Mon header devra donc avoir une scroll bar.

    Et en dessous de mon header, je vais disposer tous plein de widget.

    Pour réaliser cela, j'avais penser de la manière suivante :
    Créer une première grid appelé grid_secondaire dans la quelle je vais coller tous mes boutons qui représenteront mon header.
    Créer une deuxième grid appelé grid_principale. J'ajoute ensuite sur la première ligne de ma grid_principale, ma grid_secondaire.
    Et ensuite, j'ajoute tous les widgets en dessous.

    Je sais pas si j'ai été bien clair (et je suis pas du tout sur de m'y prendre de la bonne manière non plus).
    J'ai fais un bout de code pour essayer d'illustrer mes propos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
    //#include "rsa.c"
     
     
    // gcc test1.c -o test1 $(pkg-config --libs --cflags gtk+-3.0)
     
     
    int main(int argc,char **argv){
     
    	// INITIALISATION DE GTK
    	gtk_init(&argc, &argv);
     
     
    	// VARIABLE
    	GtkWidget *fenetre = NULL;
    	GtkWidget *scroll_bar;
     	GtkWidget *grid, *general_grid = NULL;
     	GtkWidget *bouton1, *bouton2, *bouton3, *bouton4, *bouton5, *bouton6, *bouton7 = NULL;
     
    	// FENETRE PRINCIPALE ET PARAMETRAGE
    	fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);				// on créer notre fenetre principale
    	gtk_window_set_title(GTK_WINDOW(fenetre), "Calculatrice Crypto");	// titre
    	gtk_window_set_default_size(GTK_WINDOW(fenetre), 500, 500);		// taille
    	gtk_window_set_position(GTK_WINDOW(fenetre), GTK_WIN_POS_CENTER);	// position 
     
     
    	scroll_bar = gtk_scrolled_window_new(NULL, NULL);
     	grid = gtk_grid_new();							// grid secodnaire (va être add dans la grid general)
     	general_grid = gtk_grid_new();						// grid principal					
     
     
    	// ----------------- BOUTON ----------------------
    	// ajoute les 5 premiers boutons sur la première ligne de la grid : grid
    	bouton1 = gtk_button_new_with_label("11111");	
    	gtk_grid_attach(GTK_GRID(grid), bouton1, 1, 1, 1, 1);
     
    	bouton2 = gtk_button_new_with_label("222222222222");	
    	gtk_grid_attach(GTK_GRID(grid), bouton2, 2, 1, 1, 1);
     
    	bouton3 = gtk_button_new_with_label("3333333333331");	
    	gtk_grid_attach(GTK_GRID(grid), bouton3, 3, 1, 1, 1);
     
    	bouton4 = gtk_button_new_with_label("4444444444444");	
    	gtk_grid_attach(GTK_GRID(grid), bouton4, 4, 1, 1, 1);
     
    	bouton5 = gtk_button_new_with_label("5555555555555");	
    	gtk_grid_attach(GTK_GRID(grid), bouton5, 5, 1, 1, 1);
     
    	// ajoute les boutons 6 et 7 sur la 2eme ligne de la grid : grid_general
    	bouton6 = gtk_button_new_with_label("6666666666666");	
    	gtk_grid_attach(GTK_GRID(general_grid), bouton6, 1, 2, 1, 1);
     
    	bouton7 = gtk_button_new_with_label("7777777777777");	
    	gtk_grid_attach(GTK_GRID(general_grid), bouton7, 2, 2, 1, 1);
     
     
     
     
     
    	gtk_grid_attach(GTK_GRID(general_grid), scroll_bar, 1, 1, 5, 1);		// ajoute la scroll_bar dans la grid (COMMENT FAIRE POUR QUE SCROLL BAR OCCUPE TOUTE LA LIGNE) ?
     
    	gtk_container_add(GTK_CONTAINER(scroll_bar), grid);				// rend grid scrollable
    	gtk_container_add(GTK_CONTAINER(fenetre), general_grid);			// add la grid : genera_grid dans la fenetre
     
     
     
     
     
    	// FONCTION DE CALLBACK 
       	g_signal_connect(G_OBJECT(fenetre), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
     
    	// AUTRE
    	gtk_widget_show_all(fenetre);				// affichage
    	gtk_main();						// lancement de la boucle infini
     
    	return EXIT_SUCCESS;
    }
    J'arrive bien a avoir ma slidebar sur mon header, mais impossible de faire en sorte que ce dernier prenne toute la place disponible dans la fenetre.
    Comment est ce que je pourrais faire pour résoudre mon problème ? (déjà, est ce qu'utiliser une grid dans une grid est la meilleur des solutions pour ce que je souhaite faire) ?


    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Bonjour,

    alors par où commencer ? Je te conseille de commencer par lire les guides de migration des anciens conteneurs vers GtkGrid et notamment la partie sur les propriétés qui contrôlent l'expansion horizontale (hexpand) et verticale (vexpand). En fait il te manque juste un appel à gtk_widget_set_hexpand sur ta scrolled window pour qu'elle s'étende horizontalement.

    Ensuite, si tu veux expérimenter des designs, il n'y a pas de secrets: utilise l'éditeur Glade. Faire ça avec du code quand on débute, ça demande trop de cycles modification/compilation/test. Avec glade tu pourras voir immédiatement l'influence de tes changements. Tu pourras ensuite soit utiliser le résultat de tes expérimentations en l'enregistrant dans un fichier .ui et en l'utilisant dans ton code avec GtkBuilder, ou bien juste le recoder en C mais en comprenant un peu mieux ce que tu fais.

    Pour le coup des GtkGrid imbriqués, j'aurais plutôt utilisé un GtkBox avec orientation horizontale, mais a priori GtkBox risque de disparaître dans de futures versions de GTK+. Donc GtkGrid est sans doute le meilleur choix, mais regarde tout de même la liste des conteneurs disponibles.

    Tu as aussi la possibilité d'utiliser gtk-inspector, un programme te permettant d'analyser une interface existante pour voir comment elle a été construite. Tu pourras alors en savoir plus sur ton interface de référence.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/02/2012, 14h52
  2. Template qui occupe toute la largeur
    Par azady dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 16/05/2011, 17h46
  3. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 12h37
  4. [css] background image qui occupe toute la surface
    Par mariogarcia dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 23/02/2006, 15h15
  5. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo