标签¶
GtkLabel 显示有限数量的文本。
标签可以包含纯文本或 标记文本。
文本渲染由 Pango 属性控制。
// A plain text label
GtkWidget *label = gtk_label_new ("Hello GNOME!");
// A markup label
GtkWidget *label = gtk_label_new ("<small>Hello</small> <b>GNOME</b>!");
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
# A plain text label
label = Gtk.Label(text="Hello GNOME!")
# A markup label
label = Gtk.Label(markup="<small>Hello</small> <b>GNOME</b>!")
// A plain text label
var label = new Gtk.Label ("Hello GNOME!");
// A Label that uses markup
var markup_label = new Gtk.Label ("<small>Hello</small> <b>GNOME</b>!") {
use_markup = true
};
// A plain text label
const label = new Gtk.Label({ label: "Hello GNOME!" });
// A Label that uses markup
const markup_label = new Gtk.Label({
label: "<small>Hello</small> <b>GNOME</b>!",
use_markup: true,
});
换行标签¶
有两个属性控制标签文本的换行
GtkLabel:wrap-mode:控制是否仅在单词边界处换行,或在任何位置换行GtkLabel:wrap:如果设置,文本过宽时将换行
通常只设置 wrap 属性。将 wrap-mode 属性保留在其默认值 Pango.WrapMode.WORD 是安全的。
当启用换行时,同一个标签可以显示具有多种不同的高度/宽度组合。标签实际换行的程度取决于它所使用的上下文以及其父容器的几何管理方式。有两个属性可以让你影响换行的量
GtkLabel::width-chars:指定换行标签的最小宽度GtkLabel::max-width-chars:指定换行标签的自然宽度
请注意,这两个属性都使用字符作为单位。它们使用当前字体的平均字符宽度转换为像素。
省略号标签¶
有时,仅显示适合的文本量,并使用省略号 (…) 表示还有更多内容会更方便。 GtkLabel 使用此属性支持此功能
GtkLabel:ellipsize:字符串省略的首选位置
将其设置为与默认值 PANGO_ELLIPSIZE_NONE 不同的值将启用省略。对于通常在末尾省略,请使用 PANGO_ELLIPSIZE_END。
要控制可以省略的标签数量,请使用 GtkLabel:width-chars 属性
GtkWidget *label =
gtk_label_new ("This is a long text that might need to get ellipsized");
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
gtk_label_set_width_chars (GTK_LABEL (label), 15);
label = Gtk.Label(text="This is a long text that might need to get ellipsized")
label.props.ellipsize = Pango.EllipsizeMode.END
label.props.width_chars = 15
var label = new Gtk.Label ("This is a long text that" +
"might need to get ellipsized") {
ellipsize = Pango.EllipsizeMode.END,
width_chars = 15
};
const label = new Gtk.Label({
label: "This is a long text that" + "might need to get ellipsized",
ellipsize: Pango.EllipsizeMode.END,
width_chars: 15,
});
注意
width-chars 属性基于字体的平均字符宽度,因此剩余的文本可能不完全是你指定的字符数。
你还可以使用 GtkLabel:max-width-chars 属性来限制标签小部件请求的自然大小。
固定行数¶
有时有必要将文本限制在一定行数。一种方法是关闭自动换行,并依靠手动在文本中插入换行符
GtkWidget *label =
gtk_label_new ("This is a long text\nthat might need\nto be wrapped");
label = Gtk.Label(text="This is a long text\nthat might need\nto be wrapped")
var label = new Gtk.Label ("This is a long text\n"+
"that might need\nto be wrapped");
const label = new Gtk.Label({
label: "This is a long text\n" + "that might need\nto be wrapped",
});
这可能存在问题,因为你必须自己平衡行长,并且翻译人员可能会通过在翻译中删除或添加换行符来无意中更改行数;此外,带有固定换行的文本在每一行中都会被省略,这可能看起来不符合预期。
更好的替代方案是恢复自动换行,并使用 set_lines() 方法告诉标签你想要多少行文本
GtkWidget *label =
gtk_label_new ("This is a long text that might need to be wrapped");
gtk_label_set_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
gtk_label_set_lines (GTK_LABEL (label), 3);
label = Gtk.Label(text="This is a long text that might need to be wrapped")
label.props.wrap = True
label.props.ellipsize = Pango.EllipsizeMode.END
label.props.lines = 3
var label = new Gtk.Label ("This is a long text that might need to be wrapped");
label.wrap = true;
label.ellipsize = Pango.EllipsizeMode.END;
label.lines = 3;
const label = new Gtk.Label({
label: "This is a long text that might need to be wrapped",
wrap: true,
ellipsize: Pango.EllipsizeMode.END,
lines: 3,
});
使用此配置,GtkLabel 将自动换行到正确的宽度,并且仅在需要时省略最后一行。
助记符¶
标签可用于描述其他小部件,例如
// Add a switch to enable a feature
GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
GtkWidget *sw = gtk_switch_new ();
GtkWidget *label = gtk_label_new ("Enable feature");
gtk_box_append (GTK_BOX (box), label);
gtk_box_append (GTK_BOX (box), sw);
# Add a switch to enable a feature
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=12)
switch = Gtk.Switch()
label = Gtk.Label(text="Enable feature")
box.append(label)
box.append(switch)
var box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12);
var switch = new Gtk.Switch ();
var label = new Gtk.Label ("Enable feature");
box.append (label);
box.append (switch);
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 12,
});
const sw = new Gtk.Switch();
const label = new Gtk.Label({
label: "Enable feature",
});
box.append(label);
box.append(sw);
为了简化键盘导航,标签可以包含“助记符”:下划线的字符,用作激活标签描述的小部件的快捷方式
// Add a switch to enable a feature
GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
GtkWidget *sw = gtk_switch_new ();
GtkWidget *label = gtk_label_new ("Enable _feature");
gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
gtk_box_append (GTK_BOX (box), label);
gtk_box_append (GTK_BOX (box), sw);
// Bind the switch to the label's mnemonic
gtk_label_set_mnemonic_widget (GTK_LABEL (label), switch);
# Add a switch to enable a feature
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=12)
switch = Gtk.Switch()
label = Gtk.Label(text="Enable _feature", use_underline=True)
box.append(label)
box.append(switch)
# Bind the switch to the label's mnemonic
label.set_mnemonic_widget(switch)
// Add a switch to enable a feature
var box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12);
var switch = new Gtk.Switch ();
var label = new Gtk.Label ("Enable _feature");
label.use_underline = true;
box.append (label);
box.append (switch);
// Bind the switch to the label's mnemonic
label.mnemonic_widget = switch;
// Add a switch to enable a feature
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 12,
});
const sw = new Gtk.Switch();
const label = new Gtk.Label({
label: "Enable _feature",
use_underline: true,
mnemonic_widget: sw,
});
box.append(label);
box.append(sw);
// Bind the switch to the label's mnemonic
label.mnemonic_widget = sw;
现在,按 Alt + F 将切换开关。
标签小部件的有用方法¶
set_selectable()将标记标签的内容为用户可选择;可选择标签的内容也可以复制到剪贴板。
API 参考¶
在这个示例中,我们使用了以下内容