3

我正在阅读教程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 */

生成程序:

在此处输入图像描述

我错过了什么?

4

3 回答 3

3

这是 GTK 错误659926。然而,这似乎主要是因为 Adwaita 主题(默认 GNOME 3 主题)忽略了框架,所以也许改变主题(使用 gnome-tweak-tool,如果你想使用 GUI)就可以了. 然而,我认为框架在许多 GUI 中被滥用,并且经常导致界面丑陋,因为它们增加了视觉混乱。越少越好。

于 2012-11-07T09:02:20.150 回答
1

您是否尝试过设置框架的阴影类型?

gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_TYPE_IN); 
于 2012-10-24T18:32:00.273 回答
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);
于 2018-09-29T15:14:52.157 回答