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+ avec C & C++ Discussion :

Redimensionner un bouton ?


Sujet :

GTK+ avec C & C++

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut Redimensionner un bouton ?
    Bonjour,

    Est ce que quelqu'un pourrait me dire pourquoi dans ce code:
    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
     
    typedef struct APPLICATION
    {
      GtkWidget *pWin;
      GtkWidget *pVBox;
      GtkWidget *pQuitBtn;
     
    }APPLICATION;
     
     
    int main (int argc, char *argv[])
    {
      APPLICATION myApp;
      gtk_init(&argc, &argv);
     
      myApp.pWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(myApp.pWin), 500, 300);
      gtk_window_set_title(GTK_WINDOW(myApp.pWin), "GTK-Win");
      g_signal_connect(G_OBJECT(myApp.pWin), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
      myApp.pVBox = gtk_vbox_new(FALSE, 0);
      gtk_container_add(GTK_CONTAINER(myApp.pWin), myApp.pVBox);
     
      myApp.pQuitBtn = gtk_button_new_with_label("Quitter");
      gtk_box_pack_start(GTK_BOX(myApp.pVBox), myApp.pQuitBtn,TRUE, TRUE, 0);
      gtk_widget_set_size_request(GTK_WIDGET(myApp.pQuitBtn), 100, 80);
      g_signal_connect(G_OBJECT(myApp.pQuitBtn),"clicked",G_CALLBACK(gtk_main_quit), NULL);
     
      gtk_widget_show_all (myApp.pWin);
      gtk_main ();
      return 0;
    }
    le bouton ne se redimensionne pas ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par tintin72
    le bouton ne se redimensionne pas ?
    gtk_widget_set_size_request permet de fixer la taille minimum du widget, sachant que ta fenêtre fait 500x300 et que tu demande à gtk d'agrandir le bouton (cf gtk_box_pack_start), il va prendre toute la place disponible.

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Ah d'accord

    Effectivement en mettant le 4eme argument à FALSE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gtk_box_pack_start(GTK_BOX(myApp.pVBox), myApp.pQuitBtn,TRUE, FALSE, 0);
    J'obtiens la hauteur voulu.
    Par contre la largeur ne bouge toujours pas, y a t'il une autre fonction à appeler ?

  4. #4
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Aprés avoir tester les fonctions gtk_box_pack_start, gtk_vbox_new et gtk_container_set_border_width dans tous les sens, je n'arrive pas à saisir la philosophie de GTK pour le placement et le redimensionnement des widgets.
    J'ai bien sûr lu le didacticiel:
    http://www.linux-france.org/article/...gtk_tut-4.html
    mais je ne suis pas arrivé à faire ce que je veux.
    un exemple valant mieux qu'un long discours, voici ce à quoi j'aimerais arriver:

    Quelqu'un pourrait-il me dire comment faire pour positionner et dimensionner un bouton de cette façon ?

    D'avance merci

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 61
    Points
    61
    Par défaut
    En fait une VBox mets tous les widgets les uns en dessous des autres mais chaque widget rempli forcément la largeur ...

    La solution serait d'utiliser une table pour lui dire où placer ton widget ... Tu pourrais lui dire de placer le widget à tel endroit exactement ainsi que sur quelle proportion de la fenêtre en largeur et en hauteur ...

    LesTables

  6. #6
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Vive les tables!!!

    En effet c'est vraiment plus précis et intuitif que les boxes!
    Je tatonne encore un peu, mais voici par exemple le code permettant d'obtenir le placement et le dimensionnement que je cherchais (voir plus haut):
    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
     
    typedef struct APPLICATION
    {
      GtkWidget *pWin;
      GtkWidget *pTable;
      GtkWidget *pQuitBtn;
     
    }APPLICATION;
     
    int main (int argc, char *argv[])
    {
      APPLICATION myApp;
      gtk_init(&argc, &argv);
     
      myApp.pWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(myApp.pWin), 500, 300);
      gtk_window_set_title(GTK_WINDOW(myApp.pWin), "GTK-Win");
      g_signal_connect(G_OBJECT(myApp.pWin), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
      myApp.pTable = gtk_table_new(1, 1, FALSE);
      gtk_container_add (GTK_CONTAINER(myApp.pWin), myApp.pTable);
      myApp.pQuitBtn = gtk_button_new_with_label("Quitter");
      g_signal_connect(G_OBJECT(myApp.pQuitBtn),"clicked",G_CALLBACK(gtk_main_quit), NULL);
      gtk_widget_set_size_request(myApp.pQuitBtn, 150, 40);
     
      gtk_table_attach(GTK_TABLE(myApp.pTable), myApp.pQuitBtn, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 10, 10);
      gtk_widget_show_all(myApp.pWin);
      gtk_main ();
      return 0;
    }
    ici la table n'a qu'une ligne et qu'une colonne (puisqu'il n'y a qu'un seul bouton à placer), mais il est trés facile de l'adapter pour placer plusieurs widgets.

    Voilà, si ça peu aider quelqu'un

Discussions similaires

  1. [AC-2010] Problème de zone de sélection aprés voir redimensionné un bouton
    Par Razmote dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/07/2014, 14h34
  2. Redimensionnement des boutons avec QLabel
    Par milmil dans le forum Qt
    Réponses: 3
    Dernier message: 31/03/2011, 22h31
  3. Redimensionner un bouton
    Par hdgetnet dans le forum Débuter
    Réponses: 2
    Dernier message: 22/02/2011, 19h09
  4. Redimensionner un bouton
    Par occor dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 16/01/2008, 10h02
  5. probleme de redimensionnement de boutons
    Par fscli dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 15h33

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