You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Label标识符?GtkAda中Label文本不显示问题求助

问题解决与说明

一、Label文本不显示的问题修复

你的代码逻辑本身没问题,但窗口默认尺寸设置过小(100x100),导致多行Label的内容被完全裁剪,看起来像是没有显示。可以通过以下两种方式修复:

方法1:调整窗口默认尺寸

把窗口的默认尺寸调大,确保Label内容能完整显示:

Win.Set_Default_Size (400, 200);

方法2:让窗口自动适配内容大小

移除手动设置的窗口尺寸,改用自动适配子部件大小的方式:

-- 移除 Win.Set_Default_Size (100,100) 这一行
Win.Set_Automatic_Size; -- 让窗口根据Label大小自动调整

修复后的完整代码示例:

With Gtk.Main;      Use Gtk.Main;
With Gtk.Window;    Use Gtk.Window;
With Gtk.Label;     Use Gtk.Label;
With Glib.Convert;  Use Glib.Convert;
With Gtk.Enums;     Use Gtk.Enums;

Procedure Texte is
   Win     : Gtk_Window;
   Lbl     : Gtk_Label ;
   newline : constant character := character'val(10) ;
   Txt : CONSTANT String := Locale_To_Utf8
                 ("Ça c'est une chaîne de" & Newline &
                  "caractères encodée en UTF-8" & Newline & 
                  "grâce à Locale_To_UTF8") ; 
begin
   Init ;
   Gtk_New (Win) ;
   -- 移除原有的小尺寸设置,改用自动适配
   Win.Set_Automatic_Size;
   win.set_title ("Du texte !") ;

   Gtk_New (Lbl,txt);
   Lbl.Set_Justify (Justify_center);
   win.add (lbl);
   Win.show_all ;
   Main ;

end Texte ;

二、获取Label的标识符

在GtkAda中,Label的标识符通常指部件的Name属性,分为两种场景:

1. 纯代码创建Label时设置与获取

  • 设置标识符:调用Set_Name方法给Label指定唯一名称
  • 获取标识符:调用Get_Name方法读取已设置的名称
    示例代码:
Gtk_New(Lbl, txt);
Lbl.Set_Name("my_custom_label"); -- 设置标识符
Put_Line("Label标识符:" & Lbl.Get_Name); -- 获取并输出标识符

2. 用Glade设计界面时获取Label标识符

在Glade中:

  • 选中Label部件,在右侧属性面板的General标签下找到Name字段,填写自定义标识符(比如main_window_label)
  • 在代码中通过Gtk.Builder加载Glade文件后,调用Get_Object方法,传入Glade中设置的Name来获取对应的Label部件:
With Gtk.Builder; Use Gtk.Builder;

-- 加载Glade文件
Builder : Gtk_Builder;
Gtk_New(Builder);
Builder.Add_From_File("your_ui.glade");

-- 通过标识符获取Label
Lbl : Gtk_Label;
Builder.Get_Object("main_window_label", Lbl);

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:03:07