求在linux系统上用GTK编写图形界面程序,要求用到窗口按钮标签容器和布局

求在linux系统上用GTK编写图形界面程序,要求用到窗口按钮标签容器和布局,第1张

void enter_callback( GtkWidget *widget,

GtkWidget *entry )

{

const gchar *entry_text

entry_text = gtk_entry_get_text (GTK_ENTRY (entry))

printf("Entry contents: %s\n", entry_text)

}

void entry_toggle_editable( GtkWidget *checkbutton,

GtkWidget *entry )

{

gtk_editable_set_editable (GTK_EDITABLE (entry),

GTK_TOGGLE_BUTTON (checkbutton)->active)

}

void entry_toggle_visibility( GtkWidget *checkbutton,

GtkWidget *entry )

{

gtk_entry_set_visibility (GTK_ENTRY (entry),

GTK_TOGGLE_BUTTON (checkbutton)->active)

}

/* 我们常见的回调函数 */

void callback( GtkWidget *widget,

gpointer data )

{

g_print ("Hello again - %s was pressed\n", (char *) data)

}

int main( int argc, char *argv[])

{

GtkWidget *window

GtkWidget *ok

GtkWidget *close

GtkWidget *text_view

GtkTextBuffer *buffer

GtkWidget *vbox

GtkWidget *hbox

GtkWidget *halign

GtkWidget *valign

gtk_init(&argc, &argv)

//=============Build a window===========//

window = gtk_window_new(GTK_WINDOW_TOPLEVEL)

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER)

gtk_window_set_default_size(GTK_WINDOW(window), 350, 280)

gtk_window_set_title(GTK_WINDOW(window), "Labyrinth")

gtk_container_set_border_width(GTK_CONTAINER(window), 10)

g_signal_connect_swapped(G_OBJECT(window), "destroy",

G_CALLBACK(gtk_main_quit), G_OBJECT(window))

//=============Adjust layout============//

vbox = gtk_vbox_new(FALSE, 5)

valign = gtk_alignment_new(0, 1, 0, 0)

gtk_container_add(GTK_CONTAINER(vbox), valign)

gtk_container_add(GTK_CONTAINER(window), vbox)

hbox = gtk_hbox_new(TRUE, 3)

//=============Build tow button========//

ok = gtk_button_new_with_label("OK")

gtk_widget_set_size_request(ok, 70, 30)

gtk_container_add(GTK_CONTAINER(hbox), ok)

close = gtk_button_new_with_label("Close")

gtk_container_add(GTK_CONTAINER(hbox), close)

halign = gtk_alignment_new(1, 0, 0, 0)

close = gtk_button_new_from_stock (GTK_STOCK_CLOSE)

gtk_container_add(GTK_CONTAINER(halign), hbox)

gtk_box_pack_start(GTK_BOX(vbox), halign, FALSE, FALSE, 0)

g_signal_connect_swapped (G_OBJECT (close), "clicked",

G_CALLBACK (gtk_widget_destroy),

window)

GTK_WIDGET_SET_FLAGS (close, GTK_CAN_DEFAULT)

gtk_widget_grab_default (close)

gtk_widget_show (close)

//=============Build a TestView==========//

text_view=gtk_text_view_new()/*创建文本框构件*/

gtk_widget_set_size_request(text_view,200,200)

gtk_container_add(GTK_CONTAINER(window),vbox)

gtk_box_pack_start(GTK_BOX(vbox),text_view,FALSE,FALSE,0)

buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view))

gtk_widget_show(text_view)

//=============================

GtkWidget *entry

gint tmp_pos

entry = gtk_entry_new ()

gtk_entry_set_max_length (GTK_ENTRY (entry), 50)

g_signal_connect (G_OBJECT (entry), "OK",

G_CALLBACK (enter_callback), entry)

gtk_entry_set_text (GTK_ENTRY (entry), "hello")

tmp_pos = GTK_ENTRY (entry)->text_length

gtk_editable_insert_text (GTK_EDITABLE (entry), " world", -1, &tmp_pos)

gtk_editable_select_region (GTK_EDITABLE (entry),

0, GTK_ENTRY (entry)->text_length)

//tmp_pos = GTK_ENTRY (entry)->text_length

//gtk_editable_insert_text (GTK_EDITABLE (entry), " hello ", -1, &tmp_pos)

//gtk_editable_select_region (GTK_EDITABLE (entry),

// 0, GTK_ENTRY (entry)->text_length)

gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0)

gtk_widget_show (entry)

gtk_widget_show_all(window)

gtk_main()

return 0

}

GTK的安装

sudo apt-get install vim #使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器

sudo apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具

sudo apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件

sudo apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置

sudo apt-get install devhelp #这将安装 devhelp GTK文档查看程序

sudo apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档

sudo apt-get instal glade libglade2-dev #这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库。在Ubuntu的机器上折腾了一下,复制了网上教程的代码在本机上编译。代码的文件名:t1.c。按照教程,用以下命令编译:

gcc t1.c 'pkg-config --cflags --libs gtk+-2.0`

编译结果:找不到gtk/gtk.h。

因为我的Ubuntu是Gnome系统,所以我以为gtk+2.0的开发程序(头文件和库文件)应该已经安装在计算机上了。其实不然,如果在Ubuntu 上开发gtk+2.0的程序,需要安装相应的头文件和库。在控制台窗口输入sudo apt-get install libgtk2.0*, gtk+2.0所需的所有文件统通下载安装完毕。再次应用编译命令:gcc t1.c 'pkg-config --cflags --libs gtk+-2.0,编译通过,运行。

pkg-config是一个用来管理包的程序,在控制台输入 pkg-config --cflags --libs gtk+-2.0 的运行结果:

-DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

可以看出,输出的文本包括了gcc编译gtk+2.0所需要的所有选项(头文件目录和库文件)。

这里有一点需要注意, gcc t1.c `pkg-config --cflags --libs gtk+-2.0`, pkg-config --cflags --libs gtk+-2.0两侧的引号并不是真正的引号,而是键盘数字件那一行,最左边的那个字符。如果错用了单引号,gcc无法使用 pkg-config --cflags --libs gtk+-2.0产生的文本作为编译选项。构造程序。

$ gcc gtkhello.c -o gtktest `pkg-config --cflags --libs gtk+-2.0`

$ ./gtktest

gcc gtk1.c `pkg-config --cflags --libs gtk+-2.0`

//////////////////////////////////////////////////////////////////////////////////////////////////////

首先获得超级用户权限

apt-get install vim #使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器

apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具

apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件

apt-get install pkg-config#用于在编译GTK程序时自动找出头文件及库文件位置

apt-get install devhelp#这将安装 devhelp GTK文档查看程序

apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档

apt-get instal glade libglade2-dev #这将安装基于GTK的界面构造程序

都是安装好后测试一下程序hello.c

#include <gtk/gtk.h>----------我编译时老是说找不到头文件,后来在/usr/include里找到gtk-2.0/gtk/gtk.h,原来是路径错误,最后将头文件路径修改为<gtk-2.0/gtk/gtk.h>,终于好了!

void hello(GtkWidget *widget,gpointer data)

{

g_print("Hello 大家好\n")

}

gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)

{

g_print ("delete event occurred\n")

return(TRUE)

}

void destroy(GtkWidget *widget,gpointer data)

{

gtk_main_quit()

}

int main( int argc, char *argv[] )

{

GtkWidget *window

GtkWidget *button

gtk_init (&argc, &argv)

window=gtk_window_new (GTK_WINDOW_TOPLEVEL)

gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL)

gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL)

gtk_container_set_border_width (GTK_CONTAINER (window), 10)

button = gtk_button_new_with_label ("Hello 大家好")

gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL)

gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT (window))

gtk_container_add (GTK_CONTAINER (window), button)

gtk_widget_show (button)

gtk_widget_show (window)/*显示一个窗口*/

gtk_main()/*进入主循环*/

return(0)

}

最后编译运行:

$ gcc hello.c -o hello `pkg-config --cflags --libs gtk+-2.0`

$ . /hello

////////////////////////////////////////////////////////////////////

GTK的安装

sudo apt-get install vim #使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器

sudo apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具

sudo apt-get install gnome-core-devel #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件

sudo apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置

sudo apt-get install devhelp #这将安装 devhelp GTK文档查看程序

sudo apt-get install libglib2.0-doc libgtk2.0-doc #这将安装 gtk/glib 的API参考手册及其它帮助文档

sudo apt-get instal glade libglade2-dev #这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库。在Ubuntu的机器上折腾了一下,复制了网上教程的代码在本机上编译。代码的文件名:t1.c。按照教程,用以下命令编译:

gcc t1.c 'pkg-config --cflags --libs gtk+-2.0`

编译结果:找不到gtk/gtk.h。

因为我的Ubuntu是Gnome系统,所以我以为gtk+2.0的开发程序(头文件和库文件)应该已经安装在计算机上了。其实不然,如果在Ubuntu 上开发gtk+2.0的程序,需要安装相应的头文件和库。在控制台窗口输入sudo apt-get install libgtk2.0*, gtk+2.0所需的所有文件统通下载安装完毕。再次应用编译命令:gcc t1.c 'pkg-config --cflags --libs gtk+-2.0,编译通过,运行。

pkg-config是一个用来管理包的程序,在控制台输入 pkg-config --cflags --libs gtk+-2.0 的运行结果:

-DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

可以看出,输出的文本包括了gcc编译gtk+2.0所需要的所有选项(头文件目录和库文件)。

这里有一点需要注意, gcc t1.c `pkg-config --cflags --libs gtk+-2.0`, pkg-config --cflags --libs gtk+-2.0两侧的引号并不是真正的引号,而是键盘数字件那一行,最左边的那个字符。如果错用了单引号,gcc无法使用 pkg-config --cflags --libs gtk+-2.0产生的文本作为编译选项。构造程序。

$ gcc gtkhello.c -o gtktest `pkg-config --cflags --libs gtk+-2.0`

$ ./gtktest

gcc gtk1.c `pkg-config --cflags --libs gtk+-2.0`


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8151617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存