GTK或GIMP ToolKit是用于生成交互界面的多平台工具库。该工具库提供完整的开发组件,GTK适用于从小型一次性工具到完整应用程序项目开发。GTK是跨平台并且API及其易用,可提高开发速度。虽然GTK使用C语言开发,但是其支持多语言应用不仅限于C/C++开发,如Perl和Python语言即可实现快速开发。GTK是GNU项目且是免费的,GTK授权组织GNU LPL允许所有开发者使用,包括那些专用软件,没有任何授权费或版权费。
GNU Image Manipulation Program
#include
#include
//# include "gtk/gtk.h"
# include "gtk/gtk.h"
# include
/* 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;
}
# 打开MSYS2 shell,运行
pacman -S mingw-w64-x86_64-gtk3
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
若希望在Python环境中开发GTK,需要安装Python绑定。
pacman -S mingw-w64-x86_64-python3-gobject
pacman -S mingw-w64-x86_64-python2-gobject
若在多语言环境(如C,C++,Fortan等)下开发GTK,需要安装类似gcc的编译器和其他开发工具:
pacman -S mingw-w64-x86_64-toolchain base-devel
将路径:F:\Serve_for_future\MSYS2\mingw64\bin
添加到系统环境变量的:Path中,请看贪吃蛇:
pkg-config --version
pkg-config --cflags gtk+-3.0
pkg-config --libs gtk+-3.0
其中,static-libgcc
后面加上空格,再写入配置文件。
传送门:https://www.gtk.org/download/index.php
# 进入命令行
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
# 安装gtk
vcpkg install gtk:x64-windows
若win环境缺少相关包,则会在/vcpkg-master/downloads
下载相关包,目录如下:
F:\Serve_for_future\vcpkg-master\downloads 的目录
2019/07/09 20:22 .
2019/07/09 20:22 ..
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 temp
2019/07/09 18:21 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 可用字节
# 安装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
# 安装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
gcc user_password.c -o user_password.out `pkt-config --cflags --libs gtk+-3.0`
./user_password.out
gcc -c user_password.c `pkg-config --cflags --libs gtk+-3.0`
gcc user_password.o -o user_password.exe `pkg-config --cflags --libs gtk+-3.0`
sudo apt-get install libxml2
sudo apt-get instll libxml2-dev
sudo apt-get install itstool
sudo apt-get install intltool
sudo tar xvf galde-3.20.4.tar.xz
cd glade-3.20.4
./configure --prefix=/usr
make&&make install
sudo chmod 776 file
cd /usr/bin
glade
(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