GTK+ - Обновить прокручиваемое окно

У меня есть прокручиваемое окно внутри главного окна. Я хочу, чтобы при нажатии кнопки обновления содержимое прокручиваемого окна обновлялось автоматически. Это обратный вызов кнопки

vbox = gtk_vbox_new(TRUE, 5);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), vbox);
gtk_signal_connect(GTK_OBJECT(button_refresh), "clicked", GTK_SIGNAL_FUNC(button_re), NULL);

есть функция обратного вызова:

 void button_re(GtkWidget *window, gpointer data){
connectserver(myFile, numof);//connect to server and get information
if(numof > 0){
    for(int i = 0; i< numof; i++){
        hbox = gtk_hbox_new(TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 2);
        sprintf(buffer, "%s", myFile[i].name);
        label = gtk_label_new(buffer);
        button_down = gtk_button_new_with_label("Download");
        gtk_signal_connect(GTK_OBJECT(button_down), "clicked", GTK_SIGNAL_FUNC(button_download), (gpointer ) i);
        gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), button_down, TRUE, FALSE, 0);
    }
}else if(numof == 0){
    label = gtk_label_new("Have nothing on server");
    gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, FALSE, 2);
}

Но когда я нажимаю кнопку, ничего не происходит. Что я должен делать? Мне очень жаль, потому что мой английский не очень хорош. Спасибо !


person Đăng phương Nguyễn    schedule 21.11.2012    source источник


Ответы (1)


В button_re вы создаете новые ярлыки, кнопки и т. д. Они не будут отображаться, пока вы каким-то образом не вызовете gtk_widget_show для них. Где-то при инициализации вашей программы - возможно, main() - возможно, вы вызываете gtk_widget_show_all в своем главном окне, которое рекурсивно "показывает" все, что находится внутри него. Но эти новые объекты не будут отображаться до тех пор, пока вы явно не запросите их отображение.

person gcbenison    schedule 21.11.2012
comment
Ооо, Большое спасибо, gcbeninson, я решил эту проблему. :) - person Đăng phương Nguyễn; 21.11.2012
comment
@ăngphươngNguyễn Если ответ вам помог, не забудьте нажать кнопку «Принять» рядом с ответом. - person user4815162342; 21.11.2012
comment
ооо, извините, я запомню :D - person Đăng phương Nguyễn; 21.11.2012
comment
У меня больше проблем: когда я снова нажимаю кнопку (когда я хочу обновить контент с сервера), новый контент добавляется в конец прокручиваемого окна, старый контент все еще там, над новым контентом. Как я могу удалить старый контент? @gcbenison - person Đăng phương Nguyễn; 21.11.2012
comment
Вероятно, вы могли бы найти и уничтожить ранее добавленные элементы, но если вам нужно именно такое поведение, вам следует заглянуть в хранилище списков GTK и связанные с ним структуры; они предназначены для такого типа использования. Найдите gtktreeview и начните оттуда. - person gcbenison; 22.11.2012