首页 > 其他分享 >桌面应用开发GTK Glade (C语言)

桌面应用开发GTK Glade (C语言)

时间:2024-02-02 11:34:55浏览次数:29  
标签:10 GTK builder gtk Glade C语言 entry True

目录

Github

git clone https://github.com/GNOME/glade.git

教程

简介

  • Glade是一个用于创建GTK图形用户界面的用户界面构建器。它允许开发者通过可视化方式设计和布局GUI元素,而不必手动编写代码。Glade生成XML格式的描述文件,描述了用户界面的结构和属性。然后,这个XML文件可以由程序加载和解释,从而创建用户界面。

可视化设计

  • Glade提供了一个直观的图形用户界面,允许用户通过拖放方式设计和布局界面元素,无需手动编写代码。

生成XML描述文件

  • 设计完成后,Glade会生成一个XML格式的描述文件,其中包含了用户界面的结构和属性信息。

与多种编程语言兼容

  • 由于生成的描述文件是基于XML的,因此可以与多种编程语言一起使用。GTK支持多种编程语言,包括C、C++、Python等。

与IDE集成

  • Glade可以与多个集成开发环境(IDE)一起使用,例如GNOME Builder,以便更方便地进行开发和调试。

安装 Glade

# 目前版本支持gtk+3
brew install glade
glade --version
# 启动
glade

image

# gtk+3 安装路径
# /usr/local/Cellar/gtk+3/3.24.41
brew info gtk+3
# GTK+3版本号
pkg-config --modversion gtk+-3.0

示例

image

demo.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <object class="GtkWindow" id="window">
    <property name="width-request">400</property>
    <property name="height-request">200</property>
    <property name="can-focus">False</property>
    <property name="title" translatable="yes">demo</property>
    <child>
      <object class="GtkBox" id="box">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkButton" id="button">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can-focus">True</property>
            <property name="receives-default">True</property>
            <property name="margin-start">10</property>
            <property name="margin-end">10</property>
            <property name="margin-top">10</property>
            <property name="margin-bottom">10</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkComboBoxText" id="combobox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="margin-start">10</property>
            <property name="margin-end">10</property>
            <property name="margin-top">10</property>
            <property name="margin-bottom">10</property>
            <property name="active">0</property>
            <property name="active-id">1</property>
            <items>
              <item id="1" translatable="yes">item1</item>
              <item id="2" translatable="yes">item2</item>
              <item id="3" translatable="yes">item3</item>
              <item id="4" translatable="yes">item4</item>
            </items>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="entry">
            <property name="visible">True</property>
            <property name="can-focus">True</property>
            <property name="margin-start">10</property>
            <property name="margin-end">10</property>
            <property name="margin-top">10</property>
            <property name="margin-bottom">10</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

demo.c

#include <gtk/gtk.h>

static void
on_button_clicked (GtkButton *button, gpointer user_data)
{
  g_print ("Hello World\n");
}

static void
on_combobox_changed (GtkComboBox *combobox, gpointer user_data)
{
  gint active_item = gtk_combo_box_get_active (combobox);
  const gchar *active_id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (combobox));
  g_print ("Selected item: %d, active_id: %s\n", active_item, active_id);
}

static void
on_entry_changed (GtkEntry *entry, gpointer user_data)
{
  const gchar *text = gtk_entry_get_text (entry);
  g_print ("Entry Text: %s\n", text);
}

static void
on_entry_activate (GtkEntry *entry, gpointer user_data)
{
  const gchar *text = gtk_entry_get_text (entry);
  g_print ("Entry Text: %s\n", text);
}

int
main (int argc, char **argv)
{
  GtkBuilder *builder = gtk_builder_new ();
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *combobox;
  GtkWidget *entry;

  gtk_init (&argc, &argv);
  gtk_builder_add_from_file (builder, "demo.glade", NULL);

  window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
  button = GTK_WIDGET (gtk_builder_get_object (builder, "button"));
  combobox = GTK_WIDGET (gtk_builder_get_object (builder, "combobox"));
  entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry"));

  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
  g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), NULL);
  g_signal_connect (combobox, "changed", G_CALLBACK (on_combobox_changed), NULL);
  g_signal_connect (entry, "changed", G_CALLBACK (on_entry_changed), NULL);
  g_signal_connect (entry, "activate", G_CALLBACK (on_entry_activate), NULL);

  g_object_unref (G_OBJECT (builder));
  gtk_widget_show (window);

  gtk_main ();
  return 0;
}
gcc $(pkg-config --cflags gtk+-3.0) -o demo demo.c $(pkg-config --libs gtk+-3.0)
# 或
gcc -o demo demo.c `pkg-config --cflags --libs gtk+-3.0`

标签:10,GTK,builder,gtk,Glade,C语言,entry,True
From: https://www.cnblogs.com/wufengsheng/p/18002862

相关文章

  • c语言考研自命题热点
    一段C语言代码是怎么执行的C语言代码的执行可以分为几个主要步骤,包括编译、链接和运行。以下是一段简单的C语言代码的执行过程:编写代码:首先,程序员编写C语言代码,包括变量声明、函数定义、控制结构等。编写的代码被保存在源文件中,通常使用.c扩展名。预处理(Preprocessing):在编译之......
  • C语言学习7
    do while 循环翻译:上来就是干事,然后while看看要不要再次执行流程图如下例子:break的应用continue的含义相同例子:1!+2!+....+10!算法下一个例子但更优解是应用二分查找和折半查找由于是一组有序数字,只要知道每一次最左边的下标和最右边的下标就可以完成对于中间数字的查找,一次一次对半......
  • 1.C语言学习--分支与循环
    1.什么是语句常在一条代码的末尾加一个分号“;”,C语言中分号前的就是一条语句;2.分支语句分支语句又叫选择结构。表示当满足某个条件时,程序可以选择不同的执行路径。包括if语句和switch语句。2.1if语句结构:if(条件)语句(带来的结果);else语句(带来的结果);若满足if括号里面的......
  • C语言学习6
    循环结构1while的循环语句分成初始化,判断,调整流程:break直接终止整个循环continue是跳过本次循环它后面的代码,直接进入下一次循环光标一直在闪,一直在进行死循环函数的一个综合库MSDN补充的一个错误然后该怎么做getchar是获取字符的意思,从哪儿获取,从你打的字符获取上面getchar是直接......
  • 2.C语言学习--分支与循环例题分析
    1.计算n的阶乘intmain(){ intret=1; inti=0; intn=0; scanf("%d",&n);//注意取地址符号&别忘记 for(i=1;i<=n;i++) { ret=ret*i; } printf("ret=%d\n",ret); return0;}效果如下所示:2.计算1!+2!+...+10!intmain(){ ......
  • C语言学习5
    define不是关键字,是预处理指令分支循环语句C语言是【结构化】的程序设计语言生活中的万事万物都可以抽象成顺序结构、选择结构、循环结构中的一种或几种的组合写法一翻译:如果表达式为真,则执行语句翻译:如果表达式为真,执行语句1;如果表达式为假,执行语句2如果if后面跟多条语句,要用上大......
  • C语言实现二分法
    现在有一个任务:从一堆有序数字中找出其中一个数字有两种方法1)从头到尾依次寻找2)从该些数字中中间部位比较若小于要找数字则在后半部分否则在前半部分再进行这样的方式进行循环,直至找到或找不到此数字现介绍这样的方法——二分法在计算机科学中,二分搜索(英语:binarysearch),也称折半搜......
  • C语言基本结构快和概念
    C语言包含了许多基本构建块和概念,下面是一些主要的部分:基本数据类型:整型(int)、字符型(char)、浮点型(float)、双精度浮点型(double)。派生类型,如数组、指针、结构体、联合体、枚举。运算符:算术运算符(如+,-,*,/)。关系运算符(如==,!=,<,>)。逻辑运算符(如&&,||,!)。位运算符(如&,|,^,......
  • start gtkmm 4 Programming (range controls)
    目录基础解析Chapter7.RangeWidgetshttps://gtkmm.org/en/documentation.htmlhttps://gnome.pages.gitlab.gnome.org/gtkmm-documentation/index.html基础容器:容器小部件与其他小部件一样,派生自Gtk::Widget.例如Gtk::Grid可以容纳许多子小部件,因此这些小部件通常具......
  • C语言之二维数组的奥妙
    二维数组是什么二维数组是一个数组,数组的元素是数组type arr[N]={arr[M]};上图等价于typearr[N][M]N行M列数组,N和M都为整形常量 二维数组的存储方法如图是一个两行两列的二维数组,比如inta[2][2],在内存中是如何存储的采用的是蛇形的方法 二维数组的使用1#i......