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;
}
我正在使用固定的容器,因为我要去窗口中不应该滚动的其他东西。顺便说一下,这经过了轻微的修改。我不得不使用'GTK_WIDGET'宏而不是'GTK_WINDOW'宏。你能否更新你的答案? – Jason
是的抱歉,我的意思是GTK_WIDGET不是GTK_WINDOW,但我重新打了一遍,而不是只是一个复制粘贴...只是一条线......我错了:/谢谢。 –
@Jason Gtk固定是非常具体的可能使用布局容器会更适合,以便布局调整窗口调整大小等 –