2009-01-14 78 views
1

如何初始化GtkScrolledWindow以避免滾動條儘可能增長?使GtkScrolledWindow默認顯示所有子項

默認情況下,它似乎越小越好。

演示代碼(與SIGINT退出):

#include <gtk/gtk.h> 

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

    gtk_init(&argc, &argv); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    sw = gtk_scrolled_window_new(NULL, NULL); 
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), 
      GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 
    gtk_container_add(GTK_CONTAINER(window), sw); 
    gtk_widget_show(sw); 

    content = gtk_button_new_with_label("This is a very, very" 
      "very very very very very very very very long text"); 
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content); 
    gtk_widget_show(content); 

    gtk_widget_show(window); 
    gtk_main(); 

    return 0; 
} 

回答

1

我認爲這兩部作品,而不是一個醜陋的黑客攻擊(多):

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

    GtkRequisition size; 
    GtkWidget* viewport; 

    gtk_init(&argc, &argv); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 

    sw = gtk_scrolled_window_new(NULL, NULL); 
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), 
      GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 
    gtk_container_add(GTK_CONTAINER(window), sw); 
    gtk_widget_show(sw); 

    content = gtk_button_new_with_label("This is a very, very" 
      "very very very very very very very very long text"); 
    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), content); 
    gtk_widget_show(content); 

    gtk_widget_show(window); 

    viewport = gtk_widget_get_ancestor(content, GTK_TYPE_VIEWPORT); 
    gtk_widget_size_request(viewport, &size); 
    gtk_widget_set_size_request(sw, size.width, size.height); 

    gtk_main(); 

    return 0; 
} 
0

我不知道該怎麼做的正確方法是這樣的,但我發現,什麼工作最適合我是設置的大小窗口,其中包含的部件通常是正確的大小本身:

gtk_window_set_default_size(GTK_WINDOW(window), 1000, 500); 

或者,你可以設置GtkScrolledWindow的大小:

gtk_widget_set_size_request(window, 500, 250); 

請注意,特別是在最後一種情況下,在計算像素大小時,可能必須考慮本地化,字體大小和其他此類細節。

+0

當然,這個工作,但它是一個醜陋的黑客攻擊,正如你所說,不除少數幸運的工作案例。而afaik你不能只是查詢一個GTK Widget的大小,你能嗎? – phihag 2009-01-21 04:21:11