2017-07-16 10 views
2

Mon Gtk.DrawingArea apparaît uniquement si je l'ajoute en tant que widget à la fenêtre principale. S'il y a un conteneur fixe dans la fenêtre et que j'ajoute DrawingArea au conteneur fixe, je ne vois rien. Mais je sais que le signal de tirage a été appelé lors du débogage.Comment rendre Gtk.DrawingArea visible dans un conteneur Gtk.Fixed, si possible?

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea(); 
drawing_area.draw.connect ((context) => { 
    context.set_source_rgba (1, 0, 0, 1); 
    context.rectangle (25, 25, 100, 100); 
    context.fill(); 
    return true; 
}); 

// Doesn't work, nothing is visible 
fixed.put (drawing_area, 25, 25); 

La variable fixe est de type Gtk.Fixed. fixed est le seul widget enfant de la fenêtre principale. Je dois mentionner que si j'ajoute un autre widget Gtk normal à fixer, comme une étiquette, cette étiquette est visible.

Si je, au lieu d'ajouter fixé à ma fenêtre principale, j'ajouter la zone de dessin comme le seul enfant de la fenêtre principale comme dans le code suivant, il affiche

// Works, rectangle is visible 
app_window.add (drawing_area); 

app_window est de type Gtk.ApplicationWindow.

Est-il possible de le rendre visible tout en étant un enfant de Fixe?

---------- ---------- Modifier

Le Gtk.DrawingArea apparaît maintenant dans le récipient fixe si je mets les demandes de taille pour elle. Comme ça

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea(); 
drawing_area.width_request = 100; 
drawing_area.height_request = 100; 
drawing_area.draw.connect ((context) => { 
    context.set_source_rgba (1, 0, 0, 1); 
    context.rectangle (0, 0, drawing_area.get_allocated_width(), drawing_area.get_allocated_height()); 
    context.fill(); 
    return true; 
}); 

Je ne sais pas si c'est la bonne façon de procéder. Cela fonctionne bien. Le widget DrawingArea avec le rectangle s'affiche maintenant dans le conteneur fixe. J'écouterai d'autres réponses s'il y a une façon recommandée de s'y prendre.

+1

C'est la bonne façon. Vous devriez l'ajouter comme réponse. – theGtknerd

+1

Compris. Merci. –

Répondre

3

Il faut définir les demandes de taille du widget Gtk.DrawingArea.

Gtk.DrawingArea drawing_area = new Gtk.DrawingArea(); 
drawing_area.width_request = 100; 
drawing_area.height_request = 100; 

drawing_area.draw.connect ((context) => { 
    context.set_source_rgba (1, 0, 0, 1); 
    context.rectangle (0, 0, drawing_area.get_allocated_width(), drawing_area.get_allocated_height()); 
    context.fill(); 
    return true; 
});