如何获取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
相关产品推荐
相关产品推荐

