2017-06-17 6 views
0

Ich kann die Eingabezeile in der horizontalen GTK-Box nicht ändern. Ich weiß nicht, wo der Fehler in der hbox oder in dem Eintrag ist, die es mir nicht erlauben, die Größe zu ändern.So ändern Sie die Größe eines Eintrags in GTK +

Ich habe diese gtk_widget_size_request Funktion verwendet, aber es funktioniert nicht. Deshalb denke ich, dass die hbox der Grund ist.

int main(int argc,char* argv[]) 
{ 
    GtkWidget *window; 
    GtkWidget *vbox; 

    GtkWidget *TreeView; 
    GtkWidget *title; 

    GtkWidget *hbox1; 
    GtkWidget *entry1; 
    GtkWidget *entry2; 
    GtkWidget *entry3; 

    GtkWidget *hbox2; 
    GtkWidget *btn1; 
    GtkWidget *btn2; 

    window=gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window),"hellow world"); 
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL); 
    gtk_widget_set_size_request(window,500,690); 
    gtk_container_set_border_width(GTK_CONTAINER(window), 15); 
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE); 

    TreeView= gtk_tree_view_new(); 

    entry1= gtk_entry_new(); //this is the entry 
    entry2= gtk_entry_new(); 
    entry3= gtk_entry_new(); 

    btn1= gtk_button_new_with_label("add"); 
    btn2= gtk_button_new_with_label("remove"); 

    hbox1= gtk_hbox_new(0, 3); //this is the hbox 
    hbox2= gtk_hbox_new(0, 3); 

    gtk_box_pack_start(GTK_BOX(hbox1), entry1, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox1), entry2, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox1), entry3, FALSE, TRUE, 3); 

    gtk_box_pack_start(GTK_BOX(hbox2), btn1, FALSE, TRUE, 3); 
    gtk_box_pack_start(GTK_BOX(hbox2), btn2, FALSE, TRUE, 3); 

    vbox= gtk_vbox_new(0,3); 
    gtk_box_pack_start(GTK_BOX(vbox), TreeView, 1, 1, 0); 
    gtk_box_pack_start (GTK_BOX (vbox), hbox1,FALSE, TRUE, 3); 
    gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, TRUE, 3); 
    gtk_container_add(GTK_CONTAINER(window), vbox); 
    gtk_widget_show_all(window); 
    gtk_main(); 
} 
+0

Sie fragt nicht explizit sowohl mit den 'gtk_widget_set_size_request Größe veränderbar sein()' und 'gtk_window_set_resizable()' Anrufe. Entferne sie beide. Um eine Anfangsgröße für ein GtkWindow festzulegen, verwenden Sie 'gtk_window_set_default_size()'. – andlabs

Antwort

0

einfach diese Zeile entfernen:

gtk_window_set_resizable(GTK_WINDOW(window), FALSE);

Und dies funktionieren wird. Sie können auch gtk_widget_set default_size anstelle dessen verwenden, was Sie derzeit haben.

Das Problem ist, dass das Festlegen des Fensters als nicht veränderbar und das Festlegen einer Größenanforderung sich widersprechen.

0

Wie gesagt, entfernen Sie zunächst gtk_window_set_resizable(GTK_WINDOW(window), FALSE);, damit GtkWindow die Größe ändern kann. Beachten Sie auch, dass Ihr Fenster während der Größenänderung nicht kleiner als 500x690 ist, da gtk_widget_set_size_request verwendet wird.

Dann haben Sie nicht erklärt, ob Sie alle drei Einträge erweitert oder nur eine oder welche Kombination möchten. Damit die Einträge erweitert werden können, müssen Sie das Erweiterungsflag auf TRUE anstelle von FALSE setzen. Gerade jetzt haben Sie:

gtk_box_pack_start(GTK_BOX(hbox1), entry1, FALSE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry2, FALSE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry3, FALSE, TRUE, 3); 

Wenn Sie alle wollen, dass die Einträge zu erweitern, dann die Fahne TRUE gesetzt:

gtk_box_pack_start(GTK_BOX(hbox1), entry1, TRUE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry2, TRUE, TRUE, 3); 
gtk_box_pack_start(GTK_BOX(hbox1), entry3, TRUE, TRUE, 3); 

Wenn Sie nur die letzte erweitern möchten, dann die ersten beiden verlassen als FALSE und die letzte als TRUE

Vom Reference API

void gtk_box_pack_start (GtkBox * box, GtkWidget * Kind, gboolean expand, gboolean fill, Guint Padding);

...

TRUE erweitern, wenn das neue Kind-Box zugeordnet zusätzlichen Platz gegeben werden soll. Der zusätzliche Platz wird gleichmäßig zwischen allen Kindern aufgeteilt werden, die verwenden diese Option

...

Verwandte Themen