简体   繁体   English

哪个小部件用于显示类似于调色板gtk3的颜色

[英]which widget is used to show color similar to color palette gtk3

im creating gui application using gtk3 C, where user will enter RGB value, i need to save that color and display it for later use, like color palette, default colorchoose widget is not suitable for my application 我使用gtk3 C创建gui应用程序,用户将在其中输入RGB值,我需要保存该颜色并将其显示以供以后使用,例如调色板,默认的colorchoose小部件不适合我的应用程序

what exactly i want is available in gtk3-widget-factory as show in image below, but i can't find the widget name gtk3-widget-factory中提供了我想要的确切内容,如下图所示,但我找不到小部件名称

在此处输入图片说明

This is the source code of the widget used on gtk3-widget-factory : 这是gtk3-widget-factory上使用的小部件的源代码:

static void
populate_colors (GtkWidget *widget)
{
  struct { const gchar *name; const gchar *color; const gchar *title; } colors[] = {
    { "2.5", "#C8828C", "Red" },
    { "5", "#C98286", NULL },
    { "7.5", "#C9827F", NULL },
    { "10", "#C98376", NULL },
    { "2.5", "#C8856D", "Red/Yellow" },
    { "5", "#C58764", NULL },
    { "7.5", "#C1895E", NULL },
    { "10", "#BB8C56", NULL },
    { "2.5", "#B58F4F", "Yellow" },
    { "5", "#AD924B", NULL },
    { "7.5", "#A79548", NULL },
    { "10", "#A09749", NULL },
    { "2.5", "#979A4E", "Yellow/Green" },
    { "5", "#8D9C55", NULL },
    { "7.5", "#7F9F62", NULL },
    { "10", "#73A06E", NULL },
    { "2.5", "#65A27C", "Green" },
    { "5", "#5CA386", NULL },
    { "7.5", "#57A38D", NULL },
    { "10", "#52A394", NULL },
    { "2.5", "#4EA39A", "Green/Blue" },
    { "5", "#49A3A2", NULL },
    { "7.5", "#46A2AA", NULL },
    { "10", "#46A1B1", NULL },
    { "2.5", "#49A0B8", "Blue" },
    { "5", "#529EBD", NULL },
    { "7.5", "#5D9CC1", NULL },
    { "10", "#689AC3", NULL },
    { "2.5", "#7597C5", "Blue/Purple" },
    { "5", "#8095C6", NULL },
    { "7.5", "#8D91C6", NULL },
    { "10", "#988EC4", NULL },
    { "2.5", "#A08CC1", "Purple" },
    { "5", "#A88ABD", NULL },
    { "7.5", "#B187B6", NULL },
    { "10", "#B786B0", NULL },
    { "2.5", "#BC84A9", "Purple/Red" },
    { "5", "#C183A0", NULL },
    { "7.5", "#C48299", NULL },
    { "10", "#C68292", NULL }
  };
  gint i;
  GtkWidget *row, *box, *label, *swatch;
  GdkRGBA rgba;

  gtk_list_box_set_header_func (GTK_LIST_BOX (widget), update_title_header, NULL, NULL);

  for (i = 0; i < G_N_ELEMENTS (colors); i++)
    {
      row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
      label = gtk_label_new (colors[i].name);
      g_object_set (label,
                    "halign", GTK_ALIGN_START,
                    "valign", GTK_ALIGN_CENTER,
                    "margin", 6,
                    "xalign", 0.0,
                    NULL);
      gtk_box_pack_start (GTK_BOX (row), label, TRUE, TRUE, 0);
      gdk_rgba_parse (&rgba, colors[i].color);
      swatch = g_object_new (g_type_from_name ("GtkColorSwatch"),
                             "rgba", &rgba,
                             "selectable", FALSE,
                             "halign", GTK_ALIGN_END,
                             "valign", GTK_ALIGN_CENTER,
                             "margin", 6,
                             "height-request", 24,
                             NULL);
      box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
      gtk_container_add (GTK_CONTAINER (box), swatch);
      gtk_box_pack_start (GTK_BOX (row), box, FALSE, FALSE, 0);
      gtk_widget_show_all (row);
      gtk_list_box_insert (GTK_LIST_BOX (widget), row, -1);
      row = gtk_widget_get_parent (row);
      gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
      if (colors[i].title)
        g_object_set_data (G_OBJECT (row), "title", (gpointer)colors[i].title);
    }

  gtk_list_box_invalidate_headers (GTK_LIST_BOX (widget));
}

I suggest you go visit their github : Widget factory GitHub 我建议您去参观他们的github: Widget factory GitHub

It's GtkColorSwatch, which is not available publically, unfortunatelly. 不幸的是,它是GtkColorSwatch,它没有公开可用。 However, due to GObject's run-time type system, it's possible to create those widgets. 但是,由于GObject的运行时类型系统,可以创建那些小部件。

import gi
from gi.repository import Gtk, GObject

GObject.type_from_name("GtkColorSwatch") # 1

Gtk.ColorChooserDialog() # 2
GObject.type_from_name("GtkColorSwatch") # 3

Line 1 fails, because GObject doesn't know this type yet. Line 1失败,因为GObject还不知道这种类型。 Line 2 creates GtkColorChooserDialog, which has GtkColorSwatch's . Line 2创建GtkColorChooserDialog,其中包含GtkColorSwatch's A side-effect of this creation is that GTK_TYPE_COLOR_SWATCH gets registered in GObject type system and that's why line 3 succeeds. 这种创建的副作用是GTK_TYPE_COLOR_SWATCH已在GObject类型系统中注册,这就是line 3成功的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM