【问题标题】:ADA & GTK => function Get_TextADA & GTK => 函数 Get_Text
【发布时间】:2015-12-10 22:26:47
【问题描述】:

我想创建一个顶层窗口并在其中使用此功能。

任何地方都没有例子......

这里是/usr/share/ada/adainclude/gtkada/gtk-gentry.ads的完整描述

function Get_Text (The_Entry : access Gtk_Entry_Record) return UTF8_String;
   --  Modify the text in the entry.
   --  The text is cut at the maximum length that was set when the entry was
   --  created.
   --  The text replaces the current contents.

对于 Debian 和亲戚操作系统,您可以访问以下目录:sudo apt-get install libgtkada2.24.1-dev

【问题讨论】:

  • 该函数用于 GtkEntry,该类表示一个小部件,该小部件包含用户可以输入的单行文本。您需要将其托管在顶层,顶层的类是称为 GtkWindow。请注意,这些是 GTK+ 类的主要名称; Ada 绑定似乎使用了不同的约定。我不知道关于 GTK+ 的任何好的 Ada 特定教程,但谷歌搜索似乎确实指向其中一些。
  • 你的回答太笼统了,我知道小部件如何与库一起工作,但你在这里真的没有帮助我.....尝试使用该功能,你会理解我的问题。
  • “testgtk”源代码中充满了示例,并且在分发版中还有更多。除非它们都被 gtkada 3.x 删除...
  • @infinite 在这种情况下,我不确定您的问题是什么。你是如何使用这个功能的,你得到了什么,你期望什么?一旦我知道我可以尝试自己重现问题并找出问题所在。
  • 这个问题真的没有上下文。我们不知道什么是尝试过的,什么是无效的。显然,要使用该功能,您需要一个 Gtk_Entry 小部件,但我认为这不是真正的问题......

标签: linux function gtk ada graphical-programming


【解决方案1】:

我想出了如何将 Get_text 函数与 Entry 一起使用。

manuBriot & andlabs =

我还在 Entry 的包中找到了 Signal 用于用户按下 _Enter 时的反应。

最后,现在一切正常。

我的程序做什么? = 它是一个窗口,看起来就像这样:http://pix.toile-libre.org/?img=1450777307.png

并且,在你写了一些东西并在图形条目中按_Enter后,结果是在命令行中打印。

简单实用的 GTK 语言入门。

WITH Gtk.Main ;          USE Gtk.Main ;
WITH Gtk.Window ;        USE Gtk.Window ;
WITH Gtk.Enums ;         USE Gtk.Enums ;
WITH Gtk.Button ;        USE Gtk.Button ;
WITH Gtk.Alignment ;     USE Gtk.Alignment ;
WITH Gtk.Box ;           USE Gtk.Box ;
WITH Gtk.Gentry;         USE Gtk.Gentry;
WITH Ada.text_io;        USE Ada.text_io;
WITH Gtk.Widget ;        USE Gtk.Widget ; 
with Gtk.Handlers;

PROCEDURE prototype IS

-----------------------
   -- VARIABLES --    | 
----------------------------------------------------------
   win : Gtk_window ;

   Btn1, Btn2 ,Btn3  : Gtk_Button ;

   alignG, alignM ,alignD  : Gtk_Alignment ;

   Boite  : Gtk_VBox ;

   Boutons :  Gtk_HBox ;

   saisie : Gtk_Entry ;



----------------------------------------------------------
--Instanciation package(s) for connexion
----------------------------------------------------------

   PACKAGE P_Callback IS NEW Gtk.Handlers.Callback(Gtk_Widget_Record);

   USE P_Callback ; 

----------------------------------------------------------
--  Handlers (or callbacks)   |
----------------------------------------------------------

   procedure Stop_Program(Emetteur : access Gtk_Widget_Record'class)
   is

      PRAGMA Unreferenced (Emetteur);

   begin

      Main_Quit;

   end Stop_Program ;


   procedure Handler_text(Ent : access Gtk_Widget_Record'class)
   is begin

   put_line(get_text(saisie));

   end Handler_text ;

-------------------------------------------------
BEGIN

   Init ; 

----------------
   -- NEW --   |
-------------------------------------------------

   Gtk_New(win);   

   Gtk_New(saisie);

   Gtk_New(Btn1, "Bouton 1") ; 
   Gtk_New(Btn2, "Bouton 2") ; 
   Gtk_New(Btn3, "Bouton 3") ; 

   Gtk_New(alignG,0.0,1.0,1.0,1.0);
   Gtk_New(alignM,0.5,1.0,1.0,1.0);
   Gtk_New(alignD,1.0,1.0,1.0,1.0);

  Gtk_New_VBox
  (Boite, homogeneous => false, Spacing => 0) ;

  Gtk_New_HBox
  (Boutons, homogeneous => false, Spacing => 0) ;

---------------------------------
--  Add                    |
---------------------------------

   alignG.add(Btn1) ;
   alignM.add(Btn2) ;
   alignD.add(Btn3) ;

   win.Add(Boite);

------------------------------------------
--  Connect                   |
------------------------------------------

Connect(Widget => win ,
          Name => "destroy" ,
            Cb => Stop_Program'access);         

Connect(Widget => saisie ,
          Name => "activate" ,
            Cb =>  Handler_text'access);

------------------------------------------
--  Design Window          |
------------------------------------------

   Boite.Pack_Start(saisie);
   Boite.Pack_Start(Boutons);
   Boutons.Pack_Start(alignG);
   Boutons.Pack_Start(alignM);
   Boutons.Pack_Start(alignD);


   win.Set_Default_Size(500,500) ;   

   win.set_position(Win_Pos_Mouse) ; 

   -- win.set_opacity(0.7) ;

   win.Show_all ; 
   Main ; 

END prototype ;

【讨论】:

    【解决方案2】:
    WITH Gtk.Main ;          USE Gtk.Main ;
    WITH Gtk.Window ;        USE Gtk.Window ;
    WITH Gtk.Gentry;         USE Gtk.Gentry;
    WITH Gtk.Box ;           USE Gtk.Box ;
    WITH Gtk.Enums ;         USE Gtk.Enums ;
    
    Procedure gtkada_get_a_entry is
    
        win : Gtk_window ;
    
       space : Gtk_Entry ;
    
       the_box : Gtk_VBox ;
    
          --    function Get_Text (The_Entry : access Gtk_Entry_Record) return UTF8_String;
          --    How to use the function ???
    
    begin
    
     Init ; 
    
     Gtk_New(win); 
    
     Gtk_New(space);
    
     Gtk_New_VBox
      (the_box, homogeneous => false, Spacing => 0) ;
    
    
     the_box.Pack_Start(space);
    
     win.Add(the_box);
    
     win.Set_Default_Size(300,200) ;   
    
     win.set_position(Win_Pos_Center) ; 
    
     win.Show_all ; 
    
       Main ; 
    
    end gtkada_get_a_entry;
    

    我只想使用包中描述的Get_text 函数。

    我发布的代码很少:在屏幕上打印文本条目,但同样,如果我不能使用该功能,它也是无用的。

    【讨论】:

    • 这看起来像是对问题的有用补充,而不是答案。
    • 您想何时获取文本?用户输入内容后?如果是这样,您将需要连接到 Gtk_Entry 的 changed 信号。
    • @andlabs = 我想在用户按下“Enter”后获取文本
    • 然后可以连接editing-done信号(继承自GtkCellEditable接口)。
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多