GTK编程
跳转到导航
跳转到搜索
编译
gcc gtkhello.c -o gtkhello $(pkg-config --cflags --libs gtk+-2.0)
示例
#include<gtk/gtk.h>
void hello(GtkWidget *widget,gpointer data)
{
g_print("Hello Ubuntu!\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 Ubuntu!");
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);
}
会显示一个带有一个按钮的窗口,点击按钮以后窗口关闭,命令行显示Hello Ubuntu! 来源:Gtk与Qt编译环境安装与配置 - Ubuntu中文
修改背景色
GdkColor color;
color.red = 0xffff;
color.green = 0xd7d7;
color.blue = 0xffff;
gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);
获取配置信息
#include<gtk/gtk.h>
GtkSettings *s;
void get_value(const gchar* prop){
gchar *str;
g_object_get(s, prop, &str, NULL);
g_printf("%s: %s\n", prop, str);
}
int main(int argc, char **argv){
gtk_init(&argc, &argv);
s = gtk_settings_get_default();
get_value("gtk-theme-name");
get_value("gtk-icon-theme-name");
return 0;
}
窗口位置改变事件
void pos_changed(GtkWindow *kbd_win, GdkEvent *event, gpointer data){
int x, y;
x = event->configure.x;
y = event->configure.y;
printf("%d, %d\n", x, y);
}
gtk_widget_add_events(GTK_WIDGET(kbd_win), GDK_CONFIGURE);
g_signal_connect(G_OBJECT(kbd_win), "configure-event",
G_CALLBACK(pos_changed), NULL);
来源:GTK+ 中的事件(events)和信号(signals)
窗口和显示
改变窗口所在的 X server
使用 gtk_window_set_screen 函数可改变窗口所在的 DISPLAY。示例代码如下(未作出错处理):
GdkDisplay *dpy = gdk_display_open(":1");
GdkScreen *scr = gdk_display_get_screen(dpy, 0);
gtk_window_set_screen(GTK_WINDOW(window), scr);
Windows 操作系统
在 Windows 系统上,使用 MinGW 链接时如果不加 -mwindows 选项,则编译出来的程序会开启一个终端窗口。如使用Visual C则要将主函数改成 WinMain 。[3]这样终端的输出将消失。
GDK
使用外部窗口
Gdk 可以根据 XID 引用其它程序的窗口。[4] GDK 2 的 API gdk_window_foreign_new 是过时的,GDK 3 使用 gdk_x11_foreign_new_for_display ,它在 GObject Introspection 中位于 GdkX11 中。[5]
#!/usr/bin/env python3
from gi.repository import Gdk
from gi.repository import GdkX11
Gdk.Window.process_all_updates()
xlib_window = 0x2a00005 # from xwininfo command
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
print(gdk_window.get_geometry())
参见
外部链接
- GTK+ 2.0 教程
- zetcode: GTK+程序设计教程
- The Python GTK+ 3 Tutorial — Python GTK+ 3 Tutorial 1.0 documentation
- GTK/GDK创建顶层透明窗口 - 画猫不成反类虎 - 永远都在学习的菜虎
- GSettings 稍长一点的简介和用法 – Mike Ma's Open-Source Base
- Rodrigo De Castro: GTK system tray icon example
- My Gtk Tutorial 2 | CS Slayer(GTK3)