2017-03-27 3 views
1

Je veux un bouton avec du texte dessus pour un GtkListStore. J'ai lu une autre réponse en utilisant une image comme un bouton, mais j'ai vraiment besoin que le titre soit du texte. Comment puis-je faire ceci? Je serais bien avec une solution qui rend le texte sur un GdkPixbuf ainsi.Ajout de GtkButton à GtkListStore avec du texte dans GTK +

J'ai essayé ceci:

GType *types; 

types = g_new0 (GType, num_fields); 

for(int i=0; i<num_fields; i++) { 
    types[i] = GTK_TYPE_BUTTON; 
} 

tree_store = gtk_list_store_newv(num_fields, types); 
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store)); 

GtkTreeViewColumn *column; 
    GtkCellRenderer *renderer; 
    GdkPixbuf  *icon; 
    renderer = gtk_cell_renderer_pixbuf_new(); 
    column = gtk_tree_view_column_new_with_attributes (name.c_str(),renderer,"pixbuf",i,NULL); 

button = gtk_button_new_with_label ("Quit"); 
     g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window); 
     gtk_widget_set_can_default (button, TRUE); 
     gtk_list_store_set(tree_store, &iter, j, button, -1); 

Il n'y a pas d'erreur, mais rien ne montre.

Je veux afficher le choix dans une nouvelle fenêtre.

+0

Essayez-vous d'ajouter un bouton à l'en-tête TreeViewColumn ou quelque chose? Votre question est difficile à comprendre. – theGtknerd

+0

@theGtknerd, pas à l'en-tête, mais à l'un des contenus des colonnes. Comparable à avoir une table qui contient des boutons. –

+0

Cette question se pose régulièrement. Gtk n'a pas CellRendererButton pour des raisons [ici] (https://ubuntuforums.org/archive/index.php/t-1009065.html). Fondamentalement, vous devriez mettre des boutons en dehors de l'arborescence. Supposons que l'utilisateur souhaite annuler 10 éléments. Il ne veut pas cliquer sur un bouton d'annulation 10 fois. Il veut sélectionner 10 articles et cliquer sur Annuler. – theGtknerd

Répondre

0

Vous avez deux options (en réalité vous avez plus de deux options, mais vous devez essayer les deux premières avant de continuer). Connectez-vous au signal "row_activated" de treeview, qui peut être réglé sur simple ou double clic. Cela passera dans le chemin de la ligne sélectionnée. Placez un bouton en dessous/en dehors de l'arborescence qui obtient une vue d'arborescence "get_selected_row". Vous pouvez ensuite l'utiliser pour obtenir le contenu de la ligne que vous souhaitez ouvrir dans une nouvelle fenêtre. Example. Astuce: voici comment Gtk recommande d'utiliser les boutons avec une vue arborescente.