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

如何从GtkAda的GtkFileChooserButton组件中获取文件名?

从Glade XML创建的GtkFileChooserButton中获取文件名

附件中的代码可正常编译运行。我需要从GtkAda组件中获取并处理文件名。我了解到直接管理对象时可以实现该操作,但无法从XML文件中获取GtkFileChooserButton的文件名。恳请您提供帮助并说明实现方法,即便使用GnatStudio我也未能找到解决办法。

谢谢,Mark


解决方案

要从Glade XML定义的GtkFileChooserButton中获取文件名,核心是通过Builder对象定位到目标控件实例,再调用GtkFileChooser的标准方法获取路径。修改window_callbacks.adb中的回调函数即可实现:

修改后的window_callbacks.adb代码

-- window_callbacks.adb

-- units from GtkAda
with Gtk.Main;

-- units from GtkAda
with Gtk.File_Chooser;           use Gtk.File_Chooser;
with Gtk.File_Chooser_Button;    use Gtk.File_Chooser_Button;

-- units from Glib
with Glib;              use Glib;
with Glib.Object;       use Glib.Object;
with Gtk.Widget;        use Gtk.Widget;

-- Ada predefined units
with Ada.Text_IO;       use Ada.Text_IO;
with Ada.Exceptions;

package body Window_Callbacks  is

  ---------------------------------
  -- On_File1_File_Set  --
  ---------------------------------

  procedure On_File1_File_Set (Builder : access Gtkada_Builder_Record'Class) is
    Button : Gtk_File_Chooser_Button;
    File_Name : UTF8_String;
  begin
    -- 通过Builder获取XML中id为"file1"的控件实例
    Button := Gtk_File_Chooser_Button(Get_Object(Builder, "file1"));
    
    -- 获取选中的文件名
    File_Name := Get_Filename(Button);
    
    -- 输出文件名
    Ada.Text_IO.Put_Line("选中的文件: " & File_Name);
  exception
    when E : others =>
      Ada.Text_IO.Put_Line("获取文件失败: " & Ada.Exceptions.Exception_Message(E));
  end On_File1_File_Set;

end Window_Callbacks;

关键实现说明

  1. 定位控件实例:使用Get_Object(Builder, "file1")从Builder中提取XML里定义的GtkFileChooserButton对象,再转换为对应的Ada类型。
  2. 获取文件路径:调用Get_Filename方法(来自Gtk.File_Chooser包)获取选中的文件路径,返回UTF8格式字符串。
  3. 异常防护:添加异常捕获逻辑,避免控件获取失败或路径读取错误导致程序崩溃。

原代码问题解析

  • 未通过Builder正确获取控件实例,注释中的Gtk.File_Button.Get_File_Name是错误的API调用方式。
  • 方法名拼写错误:Gtk.File_Chooser_Button.Get_File__Name应为Get_Filename。

修改后,当你通过GtkFileChooserButton选择文件时,回调函数会自动输出选中的文件路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:35