如何在GtkTable上实现按钮按下事件 [英] How to Implement a button-press-event on GtkTable

查看:550
本文介绍了如何在GtkTable上实现按钮按下事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我不想让我的GtkTable抛出一个事件,如果我点击一个单元格。

/ p>

由于没有点击事件,因此接受GtkButton,我希望实施一个 GDK_BUTTON_PRESS_MASK GDK_BUTTON_RELEASE_MASK 点击期间鼠标在表格上的位置。
在GtkDrawingArea上效果很好!



尝试了snipet的波纹管,但没有任何事情发生,也许有人可以给我一个线索:)

小样本:

$ p $ static void table_press(GtkWidget * widget,GdkEventButton * event)
{
printf(table pressed);


int main(int argc,char ** argv)
{
GtkWidget * window;
GtkWidget *表;

gtk_init(& argc,& argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(窗口),表格点击);

table = gtk_table_new(2,5,TRUE);

gtk_container_add(GTK_CONTAINER(window),table);

gtk_widget_add_events(table,GDK_BUTTON_PRESS_MASK);
$ b $ 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();
返回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);


Searching the web for answers dosen't get me through my problem:

I wan't my GtkTable to throw an event, if i click one cell.

Since there is no click event, accept for GtkButton's, i wanted to implement a GDK_BUTTON_PRESS_MASK and GDK_BUTTON_RELEASE_MASK to catch the position of the mouse on the Table during click. Works great with GtkDrawingArea!

Tryed the snipet bellow, but nothing happend, maybe someone can give me a clue :)

little sample:

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;
}

解决方案

You don't receive events because GtkTable does not have a GdkWindow associated with it. You can use GtkEventBox which lets you accept events on widgets that would not normally accept events. This is derived from GtkBin so the interesting code would look like this.

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);

这篇关于如何在GtkTable上实现按钮按下事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆