2017-05-28 95 views
1

我想在我的GtkWindow中有一個可滾動的GtkTextView,但我只想要GtkTextView部分滾動而不是整個窗口。我嘗試將GTKTextView放入GtkScrolledWindow的內部,並將GtkScrolledWindow放入GtkFixed容器內,但不顯示GtkTextView。但是,當我將GtkTextView直接放在GtkFixed容器內時,它就顯示出來了。如何將GTKScrolledWindow放入另一個容器內?

#include <gtk/gtk.h> 

GtkWidget *window, *scrolled_window, *fixed, *log_box, *button1; 
GtkTextBuffer *log_box_buffer; 

static void button1_clicked(GtkWidget *widget, gpointer data) { 
    printf("button1_clicked\n"); 
    gtk_text_buffer_insert_at_cursor(log_box_buffer, "You clicked the button.\n", 24); 
} 

static void app_activate(GtkApplication *app, gpointer user_data) { 

    window = gtk_application_window_new(app); 
    gtk_window_set_title(GTK_WINDOW(window), "Window Title Here"); 
    gtk_window_set_default_size(GTK_WINDOW(window), 700, 400); 
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 

    scrolled_window = gtk_scrolled_window_new(NULL, NULL); 

    fixed = gtk_fixed_new(); 

    button1 = gtk_button_new_with_label("Button 1"); 
    g_signal_connect(button1, "clicked", G_CALLBACK(button1_clicked), NULL); 

    log_box_buffer = gtk_text_buffer_new(NULL); 
    log_box = gtk_text_view_new_with_buffer(log_box_buffer); 

    gtk_fixed_put(GTK_FIXED(fixed), button1, 50, 50); 


    /* Here I tried to put the textview inside of the scrolled window and 
     add the scrolled window to the fixed container. The textview 
     doesn't show up when I do this. */ 

    gtk_container_add(GTK_CONTAINER(scrolled_window), log_box); 
    gtk_fixed_put(GTK_FIXED(fixed), scrolled_window, 200, 50); 


    /* I also tried putting the textview directly in the fixed container. 
     This shows up, but obviously I can't scroll it. */ 

// gtk_fixed_put(GTK_FIXED(fixed), log_box, 200, 50); 


    gtk_container_add(GTK_CONTAINER(window), fixed); 
    gtk_widget_show_all(window); 
} 

int main(int argc, char **argv) { 

    GtkApplication *app; 
    int status; 

    app = gtk_application_new("the.application.id", G_APPLICATION_FLAGS_NONE); 
    g_signal_connect(app, "activate", G_CALLBACK(app_activate), NULL); 

    status = g_application_run(G_APPLICATION(app), argc, argv); 

    g_object_unref(app); 
    return status; 
} 

回答

1

不確定爲什麼要使用固定容器。如果是這樣,您必須提供包含textview的滾動窗口的寬度和高度。我已經編譯了你的代碼,它可以工作。只需添加:

gtk_widget_set_size_request (GTK_WIDGET(scrolled_window), 200, 200); 

並且這將在您的滾動窗口上將200的大小設置爲200。

+0

我正在使用固定的容器,因爲我要去窗口中不應該滾動的其他東西。順便說一下,這經過了輕微的修改。我不得不使用'GTK_WIDGET'宏而不是'GTK_WINDOW'宏。你能否更新你的答案? – Jason

+1

是的抱歉,我的意思是GTK_WIDGET不是GTK_WINDOW,但我重新打了一遍,而不是隻是一個複製粘貼...只是一條線......我錯了:/謝謝。 –

+1

@Jason Gtk固定是非常具體的可能使用佈局容器會更適合,以便佈局調整窗口調整大小等 –

相關問題