首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeBASIC和GTK Glade是如何运作的?

FreeBASIC和GTK Glade是如何运作的?
EN

Stack Overflow用户
提问于 2021-10-05 17:46:53
回答 1查看 152关注 0票数 1

几个月前,我开始使用GTK库使用FreeBASIC编程,这样应用程序就可以在Windows和Linux上运行,而无需重写代码,但作为初学者,我只创建了掩码,但不知道如何处理按下按钮。

有人能告诉我该怎么做才能按下按钮吗?

代码语言:javascript
复制
    #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>" _
!"\0")
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-05 18:20:05

首先,需要在XML代码中添加一个信号,该信号指的是按下按钮。例如。

代码语言:javascript
复制
"<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)“之前,有时在编译过程中,如果稍后包含它,可能会产生一些错误(可能是编译器错误或代码过于混乱)

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69455076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档