【问题标题】:Chat window with Gtk+与 Gtk+ 的聊天窗口
【发布时间】:2012-01-16 09:23:41
【问题描述】:

我正在使用 Gtk+(技术上是 GtkAda)在 Ada 中编写某种聊天。我对一些Gtk 有疑问。我的窗口由EntryTextViewButton(“发送”)组成。

难点在于处理程序On_Button_Send_Clicked(处理按钮上“单击”信号的过程)。我想读取文本表单Entry 并将其放在TextView 中,但是当我将信号与处理程序这样:

package Handlers is new Gtk.Handlers.Callback
    (Widget_Type => Gtk_Widget_Record);

procedure On_Button_Send_Clicked
    (Object : access Gtk_Widget_Record'Class);
...

Handlers.Connect
   (Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);

我的问题是:有没有像Get_Gtk_EntryGet_Text_View 这样的简单方法?还是有其他方法,但仍然很简单?

我还遇到了一个解决方案,我在其中声明了一条记录:

type Widget_Collection_Record is new Glib.Object.GObject_Record with record
    Terminal   : Gtk.GEntry.Gtk_Entry;
    Text_Field : Gtk.Text_View.Gtk_Text_View;
end record;

并以这种方式进行回调:

package Widget_Collection_Cb is new Gtk.Handlers.Callback
    (Widget_Type => Widget_Collection_Record);

procedure On_Button_Send_Clicked
    (Object : access Widget_Collection_Record'Class);

但现在我有另一个问题:我如何将来自Button 的信号与处理程序连接起来,因为小部件Button 不是我的Widget_Collection_Record 的一部分?

我不确定我的声音是否清晰......

所以,如果你知道可以解决我的问题的东西,请发帖 - 它可能是 C、C++、Python - 我会尝试将其转换为 Ada ;D

我的问题的总结是:

当点击Button 时,如何编写一个处理程序来读取Entry 并写入Text_View

编辑:问题已结束。我知道我的要求并不清楚,这就是我选择将User_Data 的记录传递给回调的方式......现在我的新问题是here

【问题讨论】:

  • 如果你在这里没有得到答案,你可以在 comp.lang.ada 试试,那里有一些知识渊博的 GtkAda 开发人员。
  • 准备sscce 也可能会有所帮助。
  • 另见answer
  • 另见example
  • 我用glade 的链接更新了这个answer;生成的 Ada 源可能有用。

标签: gtk ada


【解决方案1】:

通常我使用这个参考:http://www.univ-orleans.fr/sciences/info/ressources/webada/doc/gtkada/gtkada_rm/index.html

您没有提供有关项目组织的太多信息。 但是,如果您有一个简单的程序来声明所有内容,那么:

procedure foo is
    -- variables
    E : GTk_GEntry;
    T : Gtk_Text_View;
    ...
    procedure On_Button_Send_Clicked (Object : access Gtk_Widget_Record'Class) is
    begin
       S : String := Get_Text (E);
       B : Gtk_Text_Buffer := Get_Buffer (T);
    begin
       Set_Text (B, S);
       ...
    end On_Button_Send_Clicked;
begin
   ...
   Handlers.Connect
      (Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);
   ...
end foo

【讨论】:

  • 据我记得,问题是我无法访问 Text_View,因为 Btn_clicked 处理程序中没有任何 Text_View 变量。 (此范围内没有 Text_View)但毕竟我的应用程序基于 gtk_bulder,并且使用该引擎我能够访问窗口的任何对象。无论如何感谢您的回答,尽管在提出问题后 5 个月有点长=P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多