Windows环境下使用GTK

一、前言

维基百科:GTK(原名GTK+)最初是GIMP的专用开发库(GIMP Toolkit),后来发展为Unix-like系统下开发图形界面的应用程序的主流开发工具之一。GTK是自由软件,并且是GNU计划的一部分。自2019年2月6日起,GTK+改名为GTK。

二、下载地址

已编译好的GTK文件下载地址:

GTK+

也可以按照官网的方式使用MSYS2进行安装:

The GTK Project - A free and open-source cross-platform widget toolkit

三、VS环境配置

Step1 解压GTK文件到本地

本文使用32位的gtk+3.6.4,解压后文件如下图,根目录设置为Gtk

Step2 添加bin文件夹到环境变量

Windows ==>> 设置 ==>> 系统 ==>> 关于 ==>> 高级系统设置 ==>> 环境变量 ==>> 点击Path ==>> 新建 ==>> 输入bin 文件夹路径 ==>> 确定

Step3 配置Gtk本地环境

输入代码(注意Gtk文件所在位置):

pkg-config --cflags gtk+-3.0 

pango-querymodules > D:\Gtk\etc\pango\pango.modules
gdk-pixbuf-query-loaders > D:\Gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
gtk-query-immodules-3.0 > D:\Gtk\lib\gtk-3.0\3.0.0\immodules.cache

Step4 新建VS项目

#include <gtk/gtk.h>

int main(int argc, char* argv[]) {
    GtkWidget* window;
    GtkWidget* label;

    gtk_init(&argc, &argv);

    /* create the main, top level, window */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /* give it the title */
    gtk_window_set_title(GTK_WINDOW(window), "Hello World");

    /* Connect the destroy signal of the window to gtk_main_quit
    * When the window is about to be destroyed we get a notification and
    * stop the main GTK+ loop
    */
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    /* Create the "Hello, World" label  */
    label = gtk_label_new("Hello, World");

    /* and insert it into the main window  */
    gtk_container_add(GTK_CONTAINER(window), label);

    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all(window);

    /* start the main loop, and let it rest there until the application is closed */
    gtk_main();

    return 0;
}

Step5 添加头文件夹

项目 ==>> GtkTest属性 ==>> 配置属性 ==>> C/C++ ==>> 常规 ==>> 附加包含目录

D:/Gtk/include

D:/Gtk/include/atk-1.0

D:/Gtk/include/cairo

D:/Gtk/include/freetype2

D:/Gtk/include/glib-2.0

D:/Gtk/include/gtk-3.0

D:/Gtk/include/libpng15

D:/Gtk/include/pixman-1

D:/Gtk/include/gdk-pixbuf-2.0

D:/Gtk/lib/glib-2.0/include

Step6 添加库文件夹

项目 ==>> GtkTest属性 ==>> 配置属性 ==>> 链接器 ==>> 常规 ==>> 附加库目录

D:/Gtk/lib

Step7 添加库文件

项目 ==>> GtkTest属性 ==>> 配置属性 ==>> 链接器 ==>> 输入 ==>> 附加依赖项

atk-1.0.lib
cairo.lib
fontconfig.lib
gailutil.lib
gdk_pixbuf-2.0.lib
gdk-win32-3.0.lib
gio-2.0.lib
glib-2.0.lib
gmodule-2.0.lib
gobject-2.0.lib
gthread-2.0.lib
gtk-win32-3.0.lib
pango-1.0.lib
pangocairo-1.0.lib
pangoft2-1.0.lib
pangowin32-1.0.lib

Step8 运行

隐藏控制台的方法:

项目右键 -> 属性 -> 配置属性 -> 链接器 ->

  • 系统 -> 子系统 -> 窗口(/SUBSYSTEM:WINDOWS)

  • 高级 -> 入口点 -> mainCRTStartup

四、使用教程

GTK+ 教程 · ZetCode 中文系列教程 · 看云

gtk学习总结:GTK从入门到放弃,三天包教包会_rtoax的博客-CSDN博客_gtk

gtk3基础知识的学习(C语言)_小陌白的博客-CSDN博客_gtk3

附录  使用示例

1. 显示图片

#include<gtk/gtk.h>
int main(int argc, char* argv[]) {

	GtkWidget* window;
	GtkWidget* frame;
	GtkWidget* image;
	GdkPixbuf* pixbuf;
	//这个函数在所有的 GTK 程序都要调用。参数由命令行中解析出来并且送到该程序中
	gtk_init(&argc, &argv);
	//建立主窗口
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	//设置窗口标题和大小
	gtk_window_set_title(GTK_WINDOW(window), "Demo");
	gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
	//从文件中建立pixbuf像素缓冲区
	pixbuf = gdk_pixbuf_new_from_file("1.png", NULL);
	//从像素缓冲区中建立图像
	image = gtk_image_new_from_pixbuf(pixbuf);
	//释放缓冲区
	g_object_unref(pixbuf);
	//创建框架
	frame = gtk_frame_new("this is a picture");
	//将图像加入框架
	gtk_container_add(GTK_CONTAINER(frame), image);
	//将框架加入窗口
	gtk_container_add(GTK_CONTAINER(window), frame);
	//窗口退出事件添加回调函数
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
	//显示窗口
	gtk_widget_show_all(window);
	//所有的 GTK 程序必须有一个 gtk_main() 函数。程序运行停在这里 等待事件 (如键盘事件或鼠标事件) 的发生。
	gtk_main();
	return 0;
}

2. 显示表格

GTK+ 2.0 Tree View Tutorial

#include <gtk/gtk.h>

enum
{
    COL_NAME = 0,
    COL_AGE,
    NUM_COLS
};


// GtkTreeModel用于保存数据
static GtkTreeModel*
create_and_fill_model(void)
{
    GtkListStore* store;
    GtkTreeIter    iter;

    store = gtk_list_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);

    /* 添加一行数据 */
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
        COL_NAME, "Heinz El-Mann",
        COL_AGE, 51,
        -1);

    /* 再添加一行数据 */
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
        COL_NAME, "Jane Doe",
        COL_AGE, 23,
        -1);

    /* 再添加一行数据 */
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
        COL_NAME, "Joe Bungop",
        COL_AGE, 91,
        -1);

    // 返回树模型
    return GTK_TREE_MODEL(store);
}


// GtkTreeView用于数据的显示
static GtkWidget*
create_view_and_model(void)
{
    GtkCellRenderer* renderer;
    GtkTreeModel* model;
    GtkWidget* view;

    view = gtk_tree_view_new();

    /* --- 第一列 --- */

    renderer = gtk_cell_renderer_text_new();
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
        -1,
        "Name",
        renderer,
        "text", COL_NAME,
        NULL);

    /* --- 第二列 --- */

    renderer = gtk_cell_renderer_text_new();
    gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
        -1,
        "Age",
        renderer,
        "text", COL_AGE,
        NULL);

    model = create_and_fill_model();

    gtk_tree_view_set_model(GTK_TREE_VIEW(view), model);

    /* The tree view has acquired its own reference to the
     *  model, so we can drop ours. That way the model will
     *  be freed automatically when the tree view is destroyed */

    g_object_unref(model);

    return view;
}


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

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window, "delete_event", gtk_main_quit, NULL); /* dirty */

    view = create_view_and_model();

    gtk_container_add(GTK_CONTAINER(window), view);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Windows平台上的GTK是用于创建图形用户界面(GUI)的一种工具包。它是一种跨平台的工具包,可以在多种操作系统上运行,包括Windows,Linux和Mac OS X。GTK与GNOME桌面环境密切相关,它为GNOME提供了默认的用户界面工具包。如果你想在Windows平台上使用GTK,你需要下载和安装GTKWindows版本,然后使用你喜欢的编程语言和开发工具编写和构建你的应用程序。 ### 回答2: Windows GTK是一种桌面应用程序开发工具包,它提供了一套用于创建跨平台图形用户界面(GUI)的编程接口。GTK是一种开源工具包,最初是为Unix-like系统设计的,但随后也被移植到了Windows平台上。 使用Windows GTK,开发者可以使用C、C++、Python等编程语言来创建各种不同类型的应用程序,如文件管理器、文本编辑器、音乐播放器等。GTK提供了丰富的控件库,包括按钮、文本框、下拉菜单等,开发者可以利用这些控件来构建用户界面。 Windows GTK还提供了许多有用的功能和特性,例如图形绘制、事件处理、多线程支持等。开发者可以使用GTK的API来实现自己的业务逻辑,同时也可以利用GTK的插件系统来扩展应用程序的功能。 相比于其他图形用户界面工具包,Windows GTK具有一些独特的优势。首先,它是一个跨平台工具包,开发者可以在不同的操作系统上运行相同的代码。其次,Windows GTK具有良好的可定制性,开发者可以根据自己的需求来修改和扩展GTK的功能。此外,GTK还拥有一个庞大的开源社区,开发者可以从中获取各种资源和支持。 总之,Windows GTK是一个功能强大的桌面应用程序开发工具包,它可以帮助开发者快速构建出高质量的跨平台应用程序。无论是初学者还是有经验的开发者,都可以通过使用GTK来简化开发过程,提高工作效率。 ### 回答3: Windows GTK是指适用于Windows操作系统的GTK(GIMP Toolkit)开发环境GTK是一种开源的跨平台图形用户界面库,最初为GNU Image Manipulation Program(GIMP)设计,后来逐渐发展成为一个通用的GUI工具包。 Windows GTK提供了一系列可以在Windows系统上进行GUI应用程序开发的工具和库。通过使用Windows GTK,开发者可以使用C、C++、Python等编程语言创建具有各种功能和特性的Windows GUI应用程序。GTK提供了丰富的API和控件,包括按钮、文本框、滑块、菜单等,开发者可以根据自己的需求选择合适的控件进行界面设计。 在使用Windows GTK开发应用程序时,开发者还可以使用Glade这样的可视化界面设计工具来简化界面布局和控件配置的过程。Glade可以将界面设计与代码分离,使得开发者更加专注于应用程序的业务逻辑的实现。 Windows GTK作为跨平台的GUI工具包,除了在Windows系统上可以进行开发外,还可以在其他操作系统上使用相同的代码进行开发,如Linux和macOS。因此,使用Windows GTK可以实现在不同平台上开发一致的GUI应用程序,并且减少了开发和维护的工作量。 总之,Windows GTK是一个适用于Windows操作系统的开发环境,提供了一系列工具和库,可以用于创建功能丰富的GUI应用程序。通过使用Windows GTK,开发者可以方便地进行界面设计和控件配置,并实现跨平台的应用程序开发。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值