1.解决系统自带gcc无法编译gtk的问题
sudo apt-get install build-essential
2.安装gtk和GOHOME环境
sudo apt-get install gnome-devel gnome-devel-docs
3.安装 pkg-config 工具,用于编译gtk的
sudo apt-get install pkg-config
4.安装gtk的gnome窗口的c/c++语言图形库
sudo apt-get install glade libglade2-dev(实际有效) 或者
sudo apt-get install glade-gnome glade-common glade-doc
sudo gcc main.cpp -o main `pkg-config --cflags --libs gtk+-2.0`
6.可能依赖裤
sudo apt-get install libgtk-3-dev libappindicator3-dev -y
7.测试,可拖动的无标题窗口
#include
gboolean on_button_press(GtkWidget* widget,
GdkEventButton * event, GdkWindowEdge edge)
{
if (event->type == GDK_BUTTON_PRESS)
{
if (event->button == 1) {
gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(widget)),
event->button,
event->x_root,
event->y_root,
event->time);
}
}
return FALSE;
}
int main( int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
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), 230, 150);
gtk_window_set_title(GTK_WINDOW(window), "Drag & drop");
gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
g_signal_connect(G_OBJECT(window), "button-press-event",
G_CALLBACK(on_button_press), NULL);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), G_OBJECT(window));
gtk_widget_show(window);
gtk_main();
return 0;
}
二.gtk(go)环境搭建(vscode编译器)
1.go环境搭建(略过)
2.create new main.go
3.go mod init yourproject
package main
import (
"fmt"
"os"
"github.com/mattn/go-gtk/glib"
"github.com/mattn/go-gtk/gtk"
)
func main() {
gtk.Init(&os.Args)
window := gtk.NewWindow(gtk.WINDOW_POPUP)
window.SetPosition(gtk.WIN_POS_CENTER)
window.SetTitle("GTK Go!")
window.SetIconName("gtk-dialog-info")
window.Connect("destroy", func(ctx *glib.CallbackContext) {
fmt.Println("got destroy!", ctx.Data().(string))
gtk.MainQuit()
}, "foo")
//--------------------------------------------------------
// GtkVBox
vbox := gtk.NewVBox(false, 2)
//--------------------------------------------------------
// button
// button := gtk.NewButtonWithLabel("Button with label")
// button.Clicked(func() {
// fmt.Println("button clicked:", button.GetLabel())
// })
// vbox.Add(button)
//--------------------------------------------------------
window.Add(vbox)
window.SetSizeRequest(242, 140)
window.ShowAll()
gtk.Main()
}
4.go mod tidy(下载安转依赖库,太慢则切换go镜像 阿里云镜像)