GTK环境部署

1 概念

1.0 GTK

GTK或GIMP ToolKit是用于生成交互界面的多平台工具库。该工具库提供完整的开发组件,GTK适用于从小型一次性工具到完整应用程序项目开发。GTK是跨平台并且API及其易用,可提高开发速度。虽然GTK使用C语言开发,但是其支持多语言应用不仅限于C/C++开发,如Perl和Python语言即可实现快速开发。GTK是GNU项目且是免费的,GTK授权组织GNU LPL允许所有开发者使用,包括那些专用软件,没有任何授权费或版权费。

1.2 GIMP

GNU Image Manipulation Program

2 Demo

#include <stdio.h>
#include <stdlib.h>
//# include "gtk/gtk.h"
# include "gtk/gtk.h"
# include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

const char *password = "secret";

void close_app(GtkWidget *window, gpointer data){
    gtk_main_quit();
}

void button_clicked(GtkWidget *button, gpointer data){
    const char *password_text = gtk_entry_get_text(GTK_ENTRY((GtkWidget *) data));
    if (strcmp(password_text, password) == 0){
//        printf("Access granted!\n");
        g_print("Access granted!\n"); 
    }
    else{
        printf("Access denied!\nTry again!");
    }
}

int main(int argc, char *argv[]){
    GtkWidget *window;
    GtkWidget *username_label, *password_label;
    GtkWidget *username_entry, *password_entry;
    GtkWidget *ok_button;
    GtkWidget *hbox1, *hbox2;
    GtkWidget *vbox;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "GtkEntryBox");
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 300);
    // g_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(close_app), NULL);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(close_app), NULL);
    username_label = gtk_label_new("Login:");
    password_label = gtk_label_new("Password:");
    username_entry = gtk_entry_new();
    password_entry = gtk_entry_new();
    ok_button = gtk_button_new_with_label("OK");

   g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(button_clicked), password_entry);
    hbox1 = gtk_hbox_new(TRUE, 5);
    hbox2 = gtk_hbox_new(TRUE, 5);
    vbox = gtk_vbox_new(FALSE, 10);
    gtk_box_pack_start(GTK_BOX(hbox1), username_label, TRUE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(hbox1), username_entry, TRUE, FALSE, 5);

    gtk_box_pack_start(GTK_BOX(hbox2), password_label, TRUE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(hbox2), password_entry, TRUE, FALSE, 5);
    
    gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), ok_button, FALSE, FALSE, 5);
    gtk_container_add(GTK_CONTAINER(window), vbox);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

在这里插入图片描述

图2.1 界面展示

3 Windows开发环境部署

3.1 方法一

3.1.0 下载MSYS2

传送门:http://www.msys2.org/
在这里插入图片描述

图3.1 下载MSYS2

3.1.2 安装GTK及其依赖

在这里插入图片描述

图3.2 MSYS2界面
# 打开MSYS2 shell,运行
pacman -S mingw-w64-x86_64-gtk3

3.1.3 安装GTK核心应用(推荐)

Glade是GTK的GUI设计界面,开发者可通过Glade设计GUI并以xml格式导出数据,同时使用代码从GtkBuilder API导入GUI。

pacman -S mingw-w64-x86_64-glade

Devhelp是帮助浏览器,可在方便地使用离线导航,获取系统中安装的GTK,glib和gobject API帮助文件。

pacman -S mingw-w64-x86_64-devhelp
3.1.4 安装python绑定(可选)

若希望在Python环境中开发GTK,需要安装Python绑定。

  • python3
pacman -S mingw-w64-x86_64-python3-gobject
  • python2
pacman -S mingw-w64-x86_64-python2-gobject

3.2.5 安装生成工具

若在多语言环境(如C,C++,Fortan等)下开发GTK,需要安装类似gcc的编译器和其他开发工具:

pacman -S mingw-w64-x86_64-toolchain base-devel

在这里插入图片描述

图3.3 工具列表

3.2.6 环境变量设置

将路径:F:\Serve_for_future\MSYS2\mingw64\bin添加到系统环境变量的:Path中,请看贪吃蛇:
在这里插入图片描述

图3.4 pkg-config环境变量配置

3.2.7 pkg-config使用

  • 查看版本
pkg-config --version

在这里插入图片描述

图3.5 pkg-config 版本
  • 生成标志位
pkg-config --cflags gtk+-3.0

在这里插入图片描述

图3.6 标志位信息
  • 生成库
pkg-config --libs gtk+-3.0

在这里插入图片描述

图3.7 库信息

3.2.8 开发环境(IDE)编译选项配置

  • DevC++为例
    配置编译选项
    在这里插入图片描述
图3.8 编译环境配置

添加配置信息
在这里插入图片描述

图3.9 配置信息添加

其中,static-libgcc后面加上空格,再写入配置文件。

3.2 方法二

3.2.1 下载GTK3.0

传送门:https://www.gtk.org/download/index.php

3.2.2 使用Microsoft vcpkg安装

# 进入命令行
win+R
# 输入cmd
cmd
# 进入对应目录
F:
# 进入文件夹
cd Serve_for_future
# 下载vcpkg包
git clone https://github.com/Microsoft/vcpkg
# 若没有git则直接下载到当前目录
https://github.com/Microsoft/vcpkg
# 进入目录
cd vcpkg-master
# 执行启动程序,编译文件
.\boostrap-vcpkg.bat

在这里插入图片描述

图3.4 执行启启动程序
# 安装gtk
vcpkg install gtk:x64-windows

在这里插入图片描述

图3.5 安装GTK

若win环境缺少相关包,则会在/vcpkg-master/downloads下载相关包,目录如下:

F:\Serve_for_future\vcpkg-master\downloads 的目录

2019/07/09  20:22    <DIR>          .
2019/07/09  20:22    <DIR>          ..
2019/07/09  17:34         1,011,639 7-zip.commandline.18.1.0.nupkg
2019/07/09  18:18           326,768 anholt-libepoxy-1.5.3.tar.gz
2019/07/09  18:42           748,972 atk-2.24.0.tar.xz
2019/07/09  18:47           782,025 bzip2-1.0.6.tar.gz
2019/07/09  19:59        41,997,432 cairo-1.16.0.tar.xz
2019/07/09  17:34        27,684,856 cmake-3.14.0-win32-x86.zip
2019/07/09  19:00         1,915,944 fontconfig-2.12.4.tar.gz
2019/07/09  18:55         2,743,740 freetype-2.10.0.tar.bz2
2019/07/09  18:44         5,769,124 gdk-pixbuf-2.36.9.tar.xz
2019/07/09  18:34        16,610,188 gettext-0.19.tar.gz
2019/07/09  18:43         1,508,805 glennrp-libpng-v1.6.37.tar.gz
2019/07/09  18:38         7,679,972 glib-2.52.3.tar.xz
2019/07/09  20:22        18,841,024 gtk+-3.22.19.tar.xz
2019/07/09  20:04         7,818,680 harfbuzz-harfbuzz-2.5.1.tar.gz
2019/07/09  18:58         8,275,473 libexpat-libexpat-R_2_2_6.tar.gz
2019/07/09  18:24           500,314 libffi-libffi-v3.1.tar.gz
2019/07/09  18:28         5,264,188 libiconv-1.15.tar.gz
2019/07/09  18:21         3,094,777 meson-0.51.0.zip
2019/07/09  18:21           247,692 ninja-1.8.2-win.zip
2019/07/09  20:10           854,372 pango-1.40.11.tar.xz
2019/07/09  18:22         2,303,348 pcre-8.41.zip
2019/07/09  18:56           891,291 pixman-0.38.0.tar.gz
2019/07/09  18:02        42,181,440 PortableGit-2.21.0-32-bit.7z.exe
2019/07/09  18:14        53,686,987 PowerShell-6.2.1-win-x86.zip
2019/07/09  18:20         6,526,486 python-3.7.3-embed-win32.zip
2019/07/09  20:01         1,232,993 ragel-6.10.tar.gz
2019/07/09  20:22    <DIR>          temp
2019/07/09  18:21    <DIR>          tools
2019/07/09  18:59            17,892 tronkko-dirent-1.23.2.tar.gz
2019/07/09  18:22           607,698 zlib1211.tar.gz
              28 个文件    261,124,120 字节
               4 个目录 55,464,747,008 可用字节

3.2.3 失败而告终

4 Ubuntu环境部署

4.1 安装GTK3.0

4.1.0 GTK2.0

# 安装gcc/g++/gdb/make 等基本编程工具
sudo apt-get install build-essential
# 安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
sudo apt-get install gnome-core-devel
# 用于在编译GTK程序时自动找出头文件及库文件位置
sudo apt-get install pkg-config
# 安装 devhelp GTK文档查看程序
sudo apt-get install devhelp
# 安装 gtk/glib 的API参考手册及其它帮助文档
sudo apt-get install libglib2.0-doc libgtk2.0-doc
# 安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库
sudo apt-get install glade libglade2-dev
# 安装gtk2.0 或者 将gtk+2.0所需的所有文件统通下载安装完毕
sudo apt-get install libgtk2.0-dev

4.1.2 GTK3.0

# 安装gcc/g++/gdb/make工具
sudo apt-get install build-essential
# 安装GTK+3.0
sudo apt-get install libgtk-3-dev
# 安装pkg-config
sudo apt-get install pkg-config
# 安装帮助文件
sudo apt-get install devhelp

4.2 编译+链接

gcc user_password.c -o user_password.out `pkt-config --cflags --libs gtk+-3.0`

4.3 执行

./user_password.out
  • 编译:生成user_password.o文件
gcc -c user_password.c `pkg-config --cflags --libs gtk+-3.0`

4.4 链接:生成exe文件

gcc user_password.o -o user_password.exe `pkg-config --cflags --libs gtk+-3.0`

4.5 安装Glade

sudo apt-get install libxml2
sudo apt-get instll libxml2-dev
  • 安装itstool
sudo apt-get install itstool
  • 升级intltool
sudo apt-get install intltool
  • 解压
sudo tar xvf galde-3.20.4.tar.xz
cd glade-3.20.4
  • 生成make
./configure --prefix=/usr
  • 安装
make&&make install
  • 修改对应文件夹权限
sudo chmod 776 file
  • 进入/usr/bin执行glade
cd /usr/bin
glade

在这里插入图片描述

图4.1 glade界面

5 总结

(1) 下载中断

错误:无法初始化事务处理 (无法锁定数据库)
错误:无法锁定数据库:File exists
  如果你确认软件包管理器没有在运行,
  你可以删除 /var/lib/pacman/db.lck。
  • 删除
rm -f /var/lib/pacman/db.lck

(2) 完成安装GTK后,最重要是配置环境变量,将bin文件路径添加到系统变量的Path中;
(3) 配置IDE编译选项,添加相应的路径,就不用在编译时使用命令pkg-config --cflags --libs gtk+-3.0
(4) 使用vcpkg方式没有安装成功,待后续研究;
(5) Ubuntu环境部署GTK3.0相对简便一些,但是编译时生成exe文件,需要指定相应的链接,并在编译时加上pkg-config --cflags --libs gtk+-3.0;


【参考文献】
[1]https://www.gtk.org/
[2]https://www.gtk.org/download/windows.php
[3]https://www.cnblogs.com/zhugeanran/p/8653507.html
[4]https://blog.csdn.net/qq_43037374/article/details/83343604
[5]https://my.oschina.net/HughLu/blog/287958?p=1
[6]https://blog.csdn.net/goodluckwhh/article/details/39992803

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值