FreeBASIC и GTK Glade как работает кнопка glade?

#gtk3 #freebasic

Вопрос:

несколько месяцев назад я начал программировать с FreeBASIC, используя библиотеки GTK, чтобы приложения работали как в Windows, так и в Linux без необходимости переписывать код, но, будучи новичком, мне удалось создать только маску, но я не знаю, как справиться с нажатием кнопки.

Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы справиться с нажатием кнопки?

     #INCLUDE ONCE "gtk/gtk.bi" 
    gtk_init(@__FB_ARGC__, @__FB_ARGV__)





DIM SHARED AS GtkBuilder PTR XML
DIM SHARED AS GObject PTR _
  mainWindow, Main_CloseButton

XML = gtk_builder_new()

SCOPE
DIM AS GError PTR meld
VAR GUISTR = SADD( _
"<?xml version=""1.0"" encoding=""UTF-8""?>" _
"<!-- Generated with glade 3.38.2 -->" _
"<interface>" _
"<requires lib=""gtk "" version=""3.24""/>" _
"<object class=""GtkWindow"" id=""mainWindow"">" _
"<property name=""can-focus"">False</property>" _
"<child>" _
"<object class=""GtkLayout"">" _
"<property name=""visible"">True</property>" _
"<property name=""can-focus"">False</property>" _
"<child>" _
"<object class=""GtkButton"" id=""Main_CloseButton"">" _
"<property name=""label"" translatable=""yes"">Close</property>" _
"<property name=""width-request"">80</property>" _
"<property name=""height-request"">30</property>" _
"<property name=""visible"">True</property>" _
"<property name=""can-focus"">True</property>" _
"<property name=""receives-default"">True</property>" _
"</object>" _
"<packing>" _
"<property name=""x"">350</property>" _
"<property name=""y"">200</property>" _
"</packing>" _
"</child>" _
"</object>" _
"</child>" _
"</object>" _
"</interface>" _
!"")
IF 0 = gtk_builder_add_from_string(XML, GUISTR, -1, @meld) THEN
  WITH *meld
    ?"Error (GTK-Builder):"
    ?*.message
  END WITH
  g_error_free(meld)
  END 2
END IF
END SCOPE

mainWindow = gtk_builder_get_object(XML, "mainWindow")
Main_CloseButton = gtk_builder_get_object(XML, "Main_CloseButton")





    gtk_builder_connect_signals(XML, 0)
    g_object_unref(XML) 
    gtk_widget_show_all(GTK_WIDGET(mainWindow)) 
    gtk_main()
 

Ответ №1:

Прежде всего, вам нужно добавить сигнал в XML-код, который ссылается на нажатие кнопки. Например.

 "<property name=""receives-default"">True</property>" _
"<signal name=""clicked"" handler=""on_Main_CloseButton_clicked"" swapped=""no""/>" _
"</object>" _
 

Создайте новый файл, вызвав его (on_Main_CloseButton_clicked.bas)
включите его перед «gtk_builder_connect_signals(XML, 0)»
Иногда во время компиляции, если она будет включена позже, это может привести к некоторым ошибкам (возможно, ошибка компилятора или слишком неаккуратный код).

 Main_CloseButton = gtk_builder_get_object(XML, "Main_CloseButton")

#INCLUDE "on_Main_CloseButton_clicked.bas"


    gtk_builder_connect_signals(XML, 0)
    g_object_unref(XML) 
    gtk_widget_show_all(GTK_WIDGET(mainWindow)) 
    gtk_main()

 

И внутри нового файла напишите вложенный файл, который активируется обработчиком

on_Main_CloseButton_clicked.bas

 SUB on_Main_CloseButton_clicked CDECL ALIAS "on_Main_CloseButton_clicked" ( _
  BYVAL widget AS GtkWidget PTR, _
  BYVAL user_data AS gpointer) EXPORT ' Standard-Parameterliste

'Place your code here 
end


END SUB