我已經用GTK在C中完成了一個小程序,其中包含一個窗口,一個盒子和一個表格。桌子上塗有一些文件。我想用其他數據刷新表格,但我不知道如何。GTK中的刷新表
此代碼將啓動一個窗口,其中包含GtkTable
。該表填寫了定時器處理功能。第一次按1,2,3的順序畫三條線,最後一次按3,2,1的順序寫三條線。但桌子從不刷新。
#include <stdlib.h>
#include <gtk/gtk.h>
static gboolean time_handler(GtkWidget *table);
gboolean launched;
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vboxgeneral;
gchar *title;
GtkWidget *table;
gtk_init(&argc, &argv);
/* WINDOW */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
title = "Test GtkTable";
gtk_window_set_title(GTK_WINDOW(window), title);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
/* ADDING GTKHBOX TO MAIN WINDOW */
vboxgeneral = gtk_vbox_new(FALSE, 0);
/* ADDING GTKTABLE TO VBOX */
table = gtk_table_new(1,1,FALSE);
gtk_box_pack_start(GTK_BOX(vboxgeneral), table, FALSE, FALSE, 0);
/* SHOW ALL */
gtk_widget_show_all(window);
/* ACTIONS */
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
/* START TIMER */
g_timeout_add(10000, (GSourceFunc) time_handler, (gpointer) window);
time_handler(table);
gtk_main();
return 0;
}
static gboolean time_handler(GtkWidget *table)
{
GtkWidget *widget;
gboolean result = FALSE;
/* ADDING TABLE DEFINITION */
if(!launched)
{
table = gtk_table_new(3,1,FALSE);
widget = gtk_label_new("File 1");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 0, 1);
widget = gtk_label_new("File 2");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 1, 2);
widget = gtk_label_new("File 3");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 2, 3);
launched = TRUE;
result = TRUE;
g_print("Timer executed fisrt time!\n");
}
else
{
table = gtk_table_new(3,1,FALSE);
widget = gtk_label_new("File 3");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 0, 1);
widget = gtk_label_new("File 2");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 1, 2);
widget = gtk_label_new("File 1");
gtk_label_set_justify(GTK_LABEL(widget), GTK_JUSTIFY_CENTER);
gtk_table_attach_defaults (GTK_TABLE (table), widget, 0, 1, 2, 3);
result = FALSE;
g_print("Timer executed last time!\n");
}
gtk_widget_draw(table, NULL);
return result;
}
你把你的數據在表中'fill_data()',但你沒有在這裏包含該功能。另一方面,你包含了許多與問題無關的代碼。你能創建一個最小的例子來顯示你想要做什麼嗎? – ptomato
我用你期待的代碼修改了這個問題。 – NEBUC
謝謝!只有請不要刪除你原來的問題,否則這個問題將來就沒有意義了。我編輯它將原始問題放回頂部。 – ptomato