Я имею проблемы с set_text изменить метку, когда я нажал на кнопкуКак изменить ярлык в GtkAda и поляны
ошибка:
Builder results
C:\Users\MaxPayne\Desktop\Ada workspace\Gui3\src\window_play.adb
42:16 expected an access type with designated type "Gtk_Label_Record" defined at gtk-label.ads:189
42:16 found package or procedure name
Ошибка в строке: Set_Text (этикетки, «Нажатие кнопки:« & Natural'Image (Count));
Это пример кода: из simple_glade3.adb
with Gtk; use Gtk;
with Gtk.Main; use Gtk.Main;
with Gtk.Widget; use Gtk.Widget;
with Gtkada.Builder; use Gtkada.Builder;
-- the following package is user defined.
with Simple_Callbacks; use Simple_Callbacks;
with Window_Play; use Window_Play;
with Gtk.Builder; use Gtk.Builder;
with Gtk.Window; use Gtk.Window;
with Gtk.Button; use Gtk.Button;
with Gtkada.Handlers; use Gtkada.Handlers;
use Gtkada.Handlers;
with Glib; use Glib;
with Glib.Error; use Glib.Error;
with Gtk.Main;
with Gtk.Label; use Gtk.Label;
with Gtk.Frame; use Gtk.Frame;
with ada.Text_IO; use ada.Text_IO;
procedure Simple_Glade3 is
Builder : Gtkada_Builder;
error : aliased GError;
Win : Gtk_Window;
ret : GUint;
Button : Gtk_Button;
begin
Gtk.Main.Init;
Gtk_New (Builder);
ret := Builder.Add_From_File ("welcomemenu.glade", error'Access);
Register_Handler
(Builder => Builder,
Handler_Name => "Main_Quit", -- from XML file <signal handler=..>
Handler => Simple_Callbacks.Quit'Access);
Do_Connect (Builder);
button := Gtk_Button (Builder.Get_Object ("btn_play"));
button.On_Clicked (changeLabel'Access);
Win := Gtk_Window (Builder.Get_Object ("win_main"));
Win.Show_All;
Gtk.Main.Main;
Ada.Text_IO.Put_Line ("The demo is over");
Unref (Builder);
end Simple_Glade3;
window_play.ads
with Gtkada.Builder; use Gtkada.Builder;
with Gtk.Main;
with Gtk.Button; use Gtk.Button;
package Window_Play is
procedure Quit (Object : access Gtkada_Builder_Record'Class);
procedure changeLabel (Self : access Gtk_Button_Record'Class);
end Window_Play;
window_play.adb
with Gtk; use Gtk;
with Gtk.Main; use Gtk.Main;
with Glib.Error; use Glib.Error;
with Gtk.Widget; use Gtk.Widget;
with Ada.Text_IO;
with Gtkada.Builder; use Gtkada.Builder;
-- the following package is user defined.
with Simple_Callbacks; use Simple_Callbacks;
with Gtk.Builder; use Gtk.Builder;
with Gtk.Window; use Gtk.Window;
with Gtk.Button; use Gtk.Button;
with Gtkada.Handlers; use Gtkada.Handlers;
with Glib; use Glib;
with Glib.Error; use Glib.Error;
with Gtk.Main;
with Ada.Text_IO; use Ada.Text_IO;
with Gtk.Label; use Gtk.Label;
package body Window_Play is
Builder : Gtkada_Builder;
error : aliased GError;
Win : Gtk_Window;
ret : GUint;
Button : Gtk_Button;
Count : Natural := 0;
procedure Quit (Object : access Gtkada_Builder_Record'Class) is
pragma Unreferenced (Object);
begin
Gtk.Main.Main_Quit;
end Quit;
procedure changeLabel (Self : access Gtk_Button_Record'Class) is
begin
Count := Count + 1;
Set_Text (Label, "The button clicks:" & Natural'Image (Count));
end changeLabel;
end Window_Play;
Сообщение об ошибке префикс '42: 16' означает«строка 42, столбец 16». Объект в столбце 16 этой строки является «Label», который, кажется, нигде не объявлен; возможно, вы имели в виду «Я»? –
Я уже добавляю ярлык: Gtk_Label; для объявления метки, но ошибка: 31: 4 предупреждение: переменная «Ярлык» читается, но никогда не назначается – user2689972
Это не ошибка, это предупреждение. Возможно, вам лучше инициализировать «Ярлык». Но в чем смысл параметра 'Self'' changeLabel'? (NB, я сам не использую Gtk, это всего лишь наблюдения за вашим кодом). –