我正在阅读GtkFrame
上的教程,我已编译了一些代码示例,但与本教程的screnhoot不同,但我使用GtkFrame
的程序没有边框。
以下代码:
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
/* GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *frame;
GtkWidget *button;
GtkWidget *label;
gint i;
/* Initialise GTK */
gtk_init(&argc, &argv);
/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Frame Example");
/* Here we connect the "destroy" event to a signal handler */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_set_size_request(window, 300, 300);
/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
label = gtk_label_new("foo");
/* Create a Frame */
frame = gtk_frame_new(NULL);
gtk_container_add(GTK_CONTAINER(frame), label);
gtk_widget_set_size_request(frame, 30, 30);
gtk_container_add(GTK_CONTAINER(window), frame);
/* Set the frame's label */
gtk_frame_set_label( GTK_FRAME(frame), "GTK Frame Widget" );
/* Set the style of the frame */
gtk_frame_set_shadow_type( GTK_FRAME(frame), GTK_SHADOW_ETCHED_OUT);
gtk_widget_show(frame);
/* Display the window */
gtk_widget_show (window);
/* Enter the event loop */
gtk_main ();
return(0);
}
/* example-end */
生成程序:
我错过了什么?
答案 0 :(得分:3)
这是GTK错误659926。但是,这似乎主要是因为Adwaita主题(默认的GNOME 3主题)忽略了框架,因此可能更改主题(使用gnome-tweak-tool,如果你想使用GUI)就可以了。但是我认为框架在许多GUI中被滥用,并且经常导致丑陋的界面,因为它们增加了视觉混乱。越少越好。
答案 1 :(得分:0)
您是否尝试过设置框架的阴影类型?
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_TYPE_IN);
答案 2 :(得分:0)
您必须使用CSS。
CSS文件示例:
frame#LINMONI_Frame_Inactiv {
color: grey;
border-style:solid;
border-width: 8px;
border-color: grey;
background-color: white;
}
,然后创建gtkwidgets:
GtkCssProvider *provider;
GdkScreen *screen;
GdkDisplay *display;
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_USER);
gsize bytes_read;
gsize bytes_written;
GError *error = NULL;
if (!gtk_css_provider_load_from_path(provider,g_filename_to_utf8("yourcssfilename.css, csCompleteFileName.GetLength(),&bytes_read, &bytes_written, &error), NULL)){
if (error){
Trace_Error("gtk_css_provider_load_from_path=%s\n",error->message);
}
}
g_object_unref(provider);