2015-09-11 8 views
0

Я имею проблемы с 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; 
+0

Сообщение об ошибке префикс '42: 16' означает«строка 42, столбец 16». Объект в столбце 16 этой строки является «Label», который, кажется, нигде не объявлен; возможно, вы имели в виду «Я»? –

+0

Я уже добавляю ярлык: Gtk_Label; для объявления метки, но ошибка: 31: 4 предупреждение: переменная «Ярлык» читается, но никогда не назначается – user2689972

+0

Это не ошибка, это предупреждение. Возможно, вам лучше инициализировать «Ярлык». Но в чем смысл параметра 'Self'' changeLabel'? (NB, я сам не использую Gtk, это всего лишь наблюдения за вашим кодом). –

ответ

1

Как Саймон отметил, что компилятор не см. переменную с именем Label в строке 42. Вместо этого она видит пакет Gtk.Label и догадывается, что это то, на что вы ссылаетесь. Предполагая, что ваши намерения, чтобы изменить то, что отображается кнопка, вы должны просто использовать

Self.Set_Label ("The button clicks:" & Count'Img); 
Смежные вопросы