【发布时间】:2012-01-16 09:23:41
【问题描述】:
我正在使用 Gtk+(技术上是 GtkAda)在 Ada 中编写某种聊天。我对一些Gtk 有疑问。我的窗口由Entry、TextView 和Button(“发送”)组成。
难点在于处理程序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_Entry 或Get_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
【问题讨论】: