作者
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
参考
安装
gtk,glade
centos
# yum install gtk2 gtk2-devel
# yum install gtk3 gtk3-devel
设置全屏
以下代码设置全屏,做为登录界面,
screen = gdk_screen_get_default();
width = gdk_screen_get_width(screen);
height = gdk_screen_get_height(screen);
printf("screen width: %d, height: %d\n", width, height);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), width, height);
gtk_window_set_decorated(GTK_WINDOW(window), FALSE); /* hide the title bar and the boder */
设置背景图片
GTK+ 3 基础知识学习
GTK进阶学习:设置窗口背景图(可指定其大小)
How to make a GTK3+ window with a background image
Gtk3 window background image
GTK Modifying Background Color of GtkButton
Best way to set Entry Background Color in Python GTK3 and set back to default
以下代码设置背景界面,做为登录界面,
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *layout;
GtkWidget *image;
GtkWidget *button;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 290, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
layout = gtk_layout_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER (window), layout);
gtk_widget_show(layout);
image = gtk_image_new_from_file("/home/my_background_image.jpg");
gtk_layout_put(GTK_LAYOUT(layout), image, 0, 0);
button = gtk_button_new_with_label("Button");
gtk_layout_put(GTK_LAYOUT(layout), button, 150, 50);
gtk_widget_set_size_request(button, 80, 35);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
使用CSS定制背景,最后使用的是这种方法,
GtkWindow {
background-image: url('/home/pi/xxx/xxx/a.png');
}
/*
* #include<string.h> for the strlen() function...
*/
void set_window_background(gchar *__imgPath__)
{
/*
* Malloc a buffer to store the css data and fill it with css code
*/
gchar *css=(gchar *)malloc((strlen(__imgPath__)+55)*sizeof(gchar));
sprintf(css,"GtkWindow{\nbackground-image: url('%s');\n}\n",__imgPath__);
/*
* Create a css provider and add pass css data to it
*/
GtkCssProvider *provider = gtk_css_provider_new();
gtk_css_provider_load_from_data(provider,css, -1, NULL);
/*
* Bind the css provider for the current display
*/
GdkDisplay *display = gdk_display_get_default();
GdkScreen *screen = gdk_display_get_default_screen (display);
gtk_style_context_add_provider_for_screen(screen,
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
);
/*
* Free the used memory...
*/
g_object_unref(provider);
g_free(css);
}
Glade
glade安装包
glade source
glade official
Using glade with python
How to install Glade 3.22 on Windows 10?
Install Glade on Raspberry Pi
UI
CSS
Overview of CSS in GTK
Supported CSS Properties
Migrating Themes from GTK 2.x to GTK 3
css in action
how to set a specific css class to a widget in gtk3? ©
creating_gtk_themes gnome桌面定制
Parsing of custom resources
As a consequence of the RC format going away, calling gtk_rc_parse() or gtk_rc_parse_string() won’t have any effect on a widgets appearance. The way to replace these calls is using a custom GtkStyleProvider, either for an individual widget through gtk_style_context_add_provider() or for all widgets on a screen through gtk_style_context_add_provider_for_screen(). Typically, the provider will be a GtkCssProvider, which parses CSS information from a file or from a string.
GtkStyleContext *context;
GtkCssProvider *provider;
context = gtk_widget_get_style_context (widget);
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
".frame1 {\n"
" border-image: url('gradient1.png') 10 10 10 10 stretch;\n"
"}\n", -1, NULL);
gtk_style_context_add_provider (context,
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref (provider);
Notice that you can also get style information from custom resources by implementing the GtkStyleProvider interface yourself. This is an advanced feature that should be rarely used.
void myCSS(void){
GtkCssProvider *provider;
GdkDisplay *display;
GdkScreen *screen;
provider = gtk_css_provider_new ();
display = gdk_display_get_default ();
screen = gdk_display_get_default_screen (display);
gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
const gchar *myCssFile = "mystyle.css";
GError *error = 0;
gtk_css_provider_load_from_file(provider, g_file_new_for_path(myCssFile), &error);
g_object_unref (provider);
}