Gtk实现GUI键盘并终端显示

本文介绍了一个使用GTK库创建虚拟键盘的方法。通过构建一个二维table,并将按钮按行列分布,实现了键盘上各按键的位置布局。每个按钮点击时都会触发相应的字符输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整体思路:建立一个table,建立一个button,在对这个button处理后,按照table的(0,1,0,1)(左右上下)位置来嵌入button,注意的是,这里的button可以重复使用,就像接下来的程序中只用一个button就完成了整个键盘的按键。

   利用gtk的table实现二维的button,button较多时编程比较繁琐。

#include <gtk/gtk.h>
void callback( GtkWidget *widget, gpointer data)
{
        g_print ("%s", (char *) data);
}
gint delete_event( GtkWidget *widget, GdkEvent *event,gpointer data )
{
        gtk_main_quit ();
        return FALSE;
}
int main( int argc, char *argv[] )
{
        GtkWidget *window;
        GtkWidget *button;
        GtkWidget *table;

        gtk_init (&argc, &argv);
 
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW (window), "Rong Tao'sKeyboard");
        g_signal_connect (G_OBJECT (window), "delete_event", 
                                    G_CALLBACK (delete_event), NULL);
        gtk_container_set_border_width (GTK_CONTAINER(window), 20);
 
        table = gtk_table_new (4, 20, TRUE);
        gtk_container_add (GTK_CONTAINER (window), table);
        button = gtk_button_new_with_label ("Q");
        g_signal_connect (G_OBJECT (button), "clicked",
                                    G_CALLBACK (callback), (gpointer) "q");
        gtk_table_attach_defaults (GTK_TABLE (table), button,0, 2, 0, 1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("W");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "w");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 4, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("E");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "e");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 4, 6, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("R");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "r");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 6, 8, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("T");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "t");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 8, 10, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("Y");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "y");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 10, 12, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("U");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "u");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 12, 14, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("I");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "i");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 14, 16, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("O");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "o");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 16, 18, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("P");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "p");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 18, 20, 0,1);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("A");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "a");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 3, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("S");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "s");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 3, 5, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("D");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "d");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 5, 7, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("F");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "f");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 7, 9, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("G");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "g");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 9, 11, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("H");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "h");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 11, 13, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("J");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "j");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 13, 15, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("K");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "k");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 15, 17, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("L");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "l");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 17, 19, 1,2);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("'");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "'");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 2, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("Z");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "z");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 4, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("X");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "x");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 4, 6, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("C");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "c");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 6, 8, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("V");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "v");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 8, 10, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("B");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "b");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 10, 12, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("N");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "n");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 12, 14, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("M");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "m");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 14, 16, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label (",");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) ",");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 16, 18, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label (".");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) ".");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 18, 20, 2,3);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("Enter");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) "\n");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 6, 3,4);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("Space");
        g_signal_connect (G_OBJECT (button), "clicked",  
                                    G_CALLBACK(callback), (gpointer) " ");
        gtk_table_attach_defaults (GTK_TABLE (table), button, 6, 16, 3,4);
        gtk_widget_show (button);
        button = gtk_button_new_with_label ("Quit");
        g_signal_connect (G_OBJECT (button), "clicked", 
                                    G_CALLBACK (delete_event), NULL);
        gtk_table_attach_defaults (GTK_TABLE (table), button,16, 19, 3, 4);
        gtk_widget_show (button);
        gtk_widget_show (table);
        gtk_widget_show (window);
        gtk_main ();
        return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值