如何在GtkTable上实现按钮按事件

在网上搜索答案不会让我解决我的问题:

如果我点击一个单元格,我不想发布一个事件。

由于没有单击事件,接受GtkButton ,我想实现GDK_BUTTON_PRESS_MASKGDK_BUTTON_RELEASE_MASK以在点击期间捕获表上鼠标的位置。 适用于GtkDrawingArea!

尝试了snipet轰鸣声,但没有任何事情发生,也许有人可以给我一个线索:)

小样本:

static void table_press(GtkWidget *widget, GdkEventButton *event) { printf("table pressed"); } int main(int argc, char **argv) { GtkWidget *window; GtkWidget* table; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), "table click"); table = gtk_table_new(2, 5, TRUE); gtk_container_add(GTK_CONTAINER (window), table); gtk_widget_add_events(table, GDK_BUTTON_PRESS_MASK); g_signal_connect(GTK_OBJECT (table), "button-press-event", G_CALLBACK (table_press), NULL); g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_show_all(window); gtk_main(); main_exit(); return 0; } 

您没有收到事件,因为GtkTable没有与之关联的GdkWindow 。 您可以使用GtkEventBox ,它允许您接受通常不接受事件的小部件上的事件。 这是从GtkBin派生的,所以有趣的代码看起来像这样。

 table = gtk_table_new(2, 5, TRUE); event_box = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER (window), event_box); gtk_container_add(GTK_CONTAINER (event_box), table); g_signal_connect(GTK_OBJECT (event_box), "button-press-event", G_CALLBACK (table_press), NULL);