在GtkCheckButton或GtkRadioButton标签中换行

时间:2010-06-30 19:05:43

标签: c checkbox gtk radio-button wrapping

当其父容器调整得足够小以使标签不适合一行时,有没有办法让GtkCheckButtonGtkRadioButton的标签换行?

3 个答案:

答案 0 :(得分:2)

您可以访问按钮的子窗口小部件 - 它是默认设置中的GtkLabel,并在其上设置各种属性,例如wrap。但是,由于GTK + 2.x中没有高宽度布局协商,因此您可能很难/几乎无法实现。请注意,如果需要,也可以替换按钮的子项。

答案 1 :(得分:0)

我也是这样工作的(使用GtkSharp)

RadioButton rb;

/* Initialize the radio button ... */

//Set its wrap mode
(rb.Child as Gtk.Label).Wrap = true;
(rb.Child as Gtk.Label).LineWrap = true;
(rb.Child as Gtk.Label).LineWrapMode = Pango.WrapMode.Word;

答案 2 :(得分:0)

如果我对问题的理解正确,那么包装GtkCheckButton的标签非常简单,至少在GTK3上是如此:

/* gcc -o wrap wrap.c $(pkg-config --libs --cflags gtk+-3.0) */
#include <gtk/gtk.h>

static void
on_activate(GtkApplication *app)
{
    GtkWidget *button;
    GtkWidget *label;
    GtkWidget *window;

    button = gtk_check_button_new_with_label("Some really useful text goes here");
    label  = gtk_bin_get_child(GTK_BIN(button));
    gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
    gtk_label_set_max_width_chars(GTK_LABEL(label), 0);

    window = gtk_application_window_new(app);
    gtk_window_set_default_size(GTK_WINDOW(window), 600, 480);
    gtk_container_add(GTK_CONTAINER(window), button);
    gtk_widget_show_all(window);
}

int
main(int argc, char **argv)
{
    GtkApplication *app;
    int status;

    app = gtk_application_new("org.gnome.LabelWrapping", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return status;
}