linux gtk 界面设计工具:glade简介

九、Gtk4-UI设计工具Cambalache和Drafting Ubuntu 22.04 adm64 (作者在Ubuntu20.04 arm64系统安装过,但是按照Gobject-intro包,会造成啊appindictor错误,无法开机进入桌面,由于知识水平和时间有限,没有寻找原因)文中前一部分重复了第一节Gtk4编译过程(因为Cambalache需要broadway-backend=true) 阅读详情

http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80:glade%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%AE%80%E4%BB%8B

一.Glade介绍

Glade是一个程序界面设计工具.使用它,你可以很方便的制作出各种界面.并且,在程序代码中,不需要对界面进行定义
和配置.大大缩短了程序开发周期.Glade将界面信息保存到一个.glade文件中.应用程序通过调用这个.glade文件,即可生成用户界面.
Glade设计初衷就是要把 GTK+/GNOME 程序的界面描述从源代码里分离出来,即使用 xxx.glade 文件来描述界面,
而不是把生成界面的 c 代码写再源代码中,这样的好处就是在后期修改程序界面非常容易,你只需要使用 Glade
来调整界面即可(实际是仅仅修改了 xxx.glade 文件,无需对源程序做改动)。另外,使用 .glade 文件来生程序界面
并不会影响到你的程序的效率,因为你只需要一次装入所有界面,然后在需要时直接使用。

二.Glade的安装

从官方网站上下载Glade:
http://glade.gnome.org/download.html

安装源码包:

# tar jxf glade-2.6.8.tar.bz2
# cd glade-2.6.8/
# ./configure --prefix=/usr
# make  
# make install  

三.Glade界面设计

我们将编写一个计算器程序,用于演示Glade使用方法.

1.运行glade. 在Turbolinux10中的gnome桌面下,点击”application”菜单→“Programming”→“Glade Interface Designer”.
glade-calc-0.jpg

如果是使用Glade源码进行的安装,直接在终端下执行:

$ galde-2

2.建立程序界面
glade启动后,点击glade主窗口中的”New”按钮,选择”New GTK+ Project”
glade-calc-1.jpg

在palette窗口上,点击”GTK+ Basic”,然后点击其中的”Window”图标(第1行第1个).此时,会打开一个叫做window1的空白窗口.
glade-calc-2.jpg

点击glade主窗口上的菜单View,选择”show Widget Tree”.会打开一个”Widget Tree”窗口.里面会显示所有已使用的控件.现在里
面只有一个window1.
glade-calc-3.jpg glade-calc-4.jpg

点击palette窗口中的Vertical Box,然后点击一下空白窗口window1.会提示”Number of rows”,输入3,选OK.窗口中出现3个横线.
glade-calc-5.jpg glade-calc-502.jpg

点击palette窗口中的Label,然后点击window1中最上面的长方形区域.
glade-calc-6.jpg

点击palette窗口中的Table,然后点击window1中,中间的长方形区域.“Number of rows”输入4,“Number of columns”输入3.
window1中间会出现12个方形区域.
glade-calc-7.jpg glade-calc-702.jpg

点击palette窗口中的Button,然后点击window1中,12个方形区域第1行,最左边的那个.将button1放置在那个区域中了.
同样,将12个区域分别放置1个button,分别是button1-button12.
glade-calc-8.jpg

点击palette窗口中的Button,然后点击window1中,最下面的长方形区域.button13放置到这个区域中.
glade-calc-9.jpg

3.设置各个控件的属性 在Widget Tree中选择window1,然后在Properties窗口中,设置其属性值:
glade-calc-901.jpg

Widget条目中,Resizable设置为No.
Common条目中,Width设置为360,Height设置为300.
Signal条目中,点击下方Signal:后面的”…“按钮,在下拉菜单中选择destroy,选择OK.然后点击左下脚的Add.
glade-calc-902.jpg

添加窗口关闭事件的signal,用于在程序中处理窗口关闭的操作.

在Widget Tree中选择label1,然后在Properties窗口中,设置其属性值:
Widget条目中,label设置为0.
Common条目中,Height设置为50.
glade-calc-903.jpg

在Widget Tree中依次选择button1-button13,并设置各个button的属性值:
Common条目中,button1-button12的Width设置为120,Height设置为50.
button13的,Height设置为50.
glade-calc-904.jpg

Widget条目中,
button1的label设置为1.依次类推,button1-button9分别设置为1-9.
button10的label设置为0.Name设置为button0.
button11的label设置为+.Name设置为buttonadd.
button12的label设置为-.Name设置为buttonsub.
button13的label设置为=.Name设置为buttonsum.
glade-calc-10.jpg

Signal条目中,为每个button分别添加一个clicked信号量.
在Signal条目中,点击下方Signal:后面的”…“按钮,在下拉菜单中选择clicked,选择OK.然后点击左下脚的Add.
glade-calc-11.jpg

4.保存项目
点击Glade主窗口上的保存图标.将项目名称和glade文件名称设置为”calc”.项目的保存位置为/tmp/project1
glade-calc-12.jpg

四.使用python

python语言可以调用glade文件,生成程序界面.在程序中,不需对界面进行配置等操作.
在/tmp/project1里编辑一个calc.py文件,添加下面的内容:

#!/usr/bin/env python
# calc
import sys
try:
	import pygtk
	pygtk.require("2.0")
except:
	pass
try:
	import gtk
	import gtk.glade
except:
	print "This program need to be run in graphical environment!"
	sys.exit(1)

class calc:
	# 初始化calc类
	def __init__(self):
		self.level = 1
		self.method = 1
		self.value1 = 0
		self.value2 = 0
		# 定义使用的glade文件
		self.gladefile = "./calc.glade"
		# 将glade文件中的界面导入到self.wTree中
		self.wTree = gtk.glade.XML(self.gladefile)
		# 建立一个字典描述各个信号量的处理函数
		# "on_window1_destroy"的处理方法是gtk.main_quit,即主程序退出.
		# 其他按键的处理方法是各自的处理函数.
		dic = { "on_window1_destroy" : gtk.main_quit,
			"on_button1_clicked" : self.button1_clicked,
			"on_button2_clicked" : self.button2_clicked,
			"on_button3_clicked" : self.button3_clicked,
			"on_button4_clicked" : self.button4_clicked,
			"on_button5_clicked" : self.button5_clicked,
			"on_button6_clicked" : self.button6_clicked,
			"on_button7_clicked" : self.button7_clicked,
			"on_button8_clicked" : self.button8_clicked,
			"on_button9_clicked" : self.button9_clicked,
			"on_button0_clicked" : self.button0_clicked,
			"on_buttonadd_clicked" : self.buttonadd_clicked,
			"on_buttonsub_clicked" : self.buttonsub_clicked,
			"on_buttonsum_clicked" : self.buttonsum_clicked }
		# 将dic与控件的signal连接
		self.wTree.signal_autoconnect(dic)
		# 定义self.label1变量,它指向控件label1
		self.label1 = self.wTree.get_widget("label1")

# 定义各个按键的clicked事件
# self.value1,self.value2,self.value3,分别表示算术表达式的第1个数字,第2个数字和计算结果.
# self.level==1表示此数值作为算术表达式的第1个数字,self.level==2表示此数值作为算术表达式的第2个数字.
# self.method==1表示进行加法运算,self.method==2表示进行减法运算.

        # 定义1-0按键的clicked处理函数
	def button1_clicked(self, widget):
		if self.level == 1:
			self.value1 = 1
		elif self.level == 2:
			self.value2 = 1
	def button2_clicked(self, widget):
		if self.level == 1:
			self.value1 = 2
		elif self.level == 2:
			self.value2 = 2
	def button3_clicked(self, widget):
		if self.level == 1:
			self.value1 = 3
		elif self.level == 2:
			self.value2 = 3
	def button4_clicked(self, widget):
		if self.level == 1:
			self.value1 = 4
		elif self.level == 2:
			self.value2 = 4
	def button5_clicked(self, widget):
		if self.level == 1:
			self.value1 = 5
		elif self.level == 2:
			self.value2 = 5
	def button6_clicked(self, widget):
		if self.level == 1:
			self.value1 = 6
		elif self.level == 2:
			self.value2 = 6
	def button7_clicked(self, widget):
		if self.level == 1:
			self.value1 = 7
		elif self.level == 2:
			self.value2 = 7
	def button8_clicked(self, widget):
		if self.level == 1:
			self.value1 = 8
		elif self.level == 2:
			self.value2 = 8
	def button9_clicked(self, widget):
		if self.level == 1:
			self.value1 = 9
		elif self.level == 2:
			self.value2 = 9
	def button0_clicked(self, widget):
		if self.level == 1:
			self.value1 = 0
		elif self.level == 2:
			self.value2 = 0
	def buttonadd_clicked(self, widget):
		self.level = 2
		self.method = 1
	def buttonsub_clicked(self, widget):
		self.level = 2
		self.method = 2
	def buttonsum_clicked(self, widget):
		self.level = 1
		if self.method == 1:
			self.value3 = self.value1 + self.value2
		elif self.method == 2:
			self.value3 = self.value1 - self.value2
		self.label1.set_text(str(self.value3))
		self.value1 = 0
		self.value2 = 0

#主函数体
if __name__ == "__main__":
	frm = calc()
	gtk.main()

# THE END

在桌面环境下的终端中运行:
$ cd /tmp/project1
$ python calc.py
glade-calc-13.jpg
这个计算器程序可以进行1位数字的加减运算.

===== 五.使用C语言调用glade文件 =====
C语言也可以通过调用glade文件,来生成程序界面.
在/tmp/project1里编辑一个calc.c文件,添加下面的内容:

// Calc.c
#include <gtk/gtk.h>
#include <glade/glade.h>

// 初始化变量,value1,value2,value3分别为算术表达式的第1个数字,第2个数字和运算结果
// method=0 表示进行加法计算,method=1表示进行减法计算.
// level=0 表示按键值赋于value1,level=1表示按键值赋于value2.
int value1=0;
int value2=0;
int value3=0;
int method=0;
int level=0;
GtkWidget * label1;

void on_window1_destroy(GtkWidget *widget, gpointer user_data) {
gtk_exit(1);
return FALSE;
}
// 定义数字键1-0的clicked处理函数
void on_button1_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=1; }
else
	{ value1=1; }
}

void on_button2_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=2; }
else
	{ value1=2; }
}

void on_button3_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=3; }
else
	{ value1=3; }
}

void on_button4_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=4; }
else
	{ value1=4; }
}

void on_button5_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=5; }
else
	{ value1=5; }
}

void on_button6_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=6; }
else
	{ value1=6; }
}

void on_button7_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=7; }
else
	{ value1=7; }
}

void on_button8_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=8; }
else
	{ value1=8; }
}

void on_button9_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=9; }
else
	{ value1=9; }
}

void on_button0_clicked(GtkWidget *widget, gpointer user_data) {
if(level)
	{ value2=0; }
else
	{ value1=0; }
}

void on_buttonadd_clicked(GtkWidget *widget, gpointer user_data) {
	level=1;
	method=0;
}

void on_buttonsub_clicked(GtkWidget *widget, gpointer user_data) {
	level=1;
	method=1;
}

// 定义buttonsum按键的clicked处理函数
void on_buttonsum(GtkWidget *widget, gpointer user_data) {
	char s1[3];
	if(method) value3=value1-value2;
	else value3=value1+value2;
	value1=0;
	value2=0;
	level=0;
	sprintf(s1,"%d",value3);
	s1[2]='\0';
	gtk_label_set_text(GTK_LABEL(user_data),s1);
}

// 主函数
int main(int argc, char *argv[]) {
    GladeXML *xml;
    GtkWidget * buttonsum;

    gtk_init(&argc, &argv);

// 加载calc.glade文件
    xml = glade_xml_new("calc.glade", NULL, NULL);

// 连接控件signal到处理函数,处理函数与控件signal的handle同名.
    glade_xml_signal_autoconnect(xml);
    label1 =  glade_xml_get_widget(xml,"label1");
    buttonsum = glade_xml_get_widget(xml,"buttonsum");

    gtk_signal_connect(GTK_OBJECT(buttonsum), "clicked",GTK_SIGNAL_FUNC (on_buttonsum), label1);
    /* start the event loop */
    gtk_main();

    return 0;
}
//  END

编译这个程序,然后运行:
$ cc -o calc calc.c `pkg-config –cflags –libs libglade-2.0`
$ ./calc


LinuxGTK系列教程 00、背上行囊1——程序员学习之道 01、背上行囊2——为什么要学习GTK 02、背上行囊3——GUI概述 03、背上行囊4——GTK简介 04、背上行囊5——GTK环境搭建( Linux ) 05、背上行囊6——GTK环境搭建( windows ) 06、踏上旅途1——一个简单的空白窗口 07、踏上旅途2——控件的添加 08、踏上旅途3——布局容器之水平布局 09、踏上旅途 阅读详情

相关推荐

Linux>Ubuntu使用glade创建gtk UI应用程序

国外有篇关于glade创建UI的文章不错,本文大致按那个示例,自己动手做一遍. https://prognotes.net/2016/03/gtk-3-c-code-hello-world-tutorial-using-glade-3/ https://prognotes.net/gtk-glade-c-programming/ 1,实验效果 2,安装glade sudo apt-get install glade 3,工程 点击左上角的创建图标创建一个glade工程,然后选择右上的

qq_23922117的博客 1306

Glade是一个相当不错的图形界面设计工具

Glade是一个相当不错的图形界面设计工具,使用Glade可以使得基于GTK+ Toolkit及GNOME桌面环境的UI开发变得更加快速和便捷.zip

Centos系统下GTK开发环境快速搭建与验证

本文详细介绍了在CentOS系统下快速搭建GTK开发环境的完整流程,包括系统基础配置、GTK核心组件安装、测试程序编写与验证,以及常见问题解决方法。通过具体命令和实用技巧,帮助开发者高效完成环境搭建,特别适合需要在Linux平台进行GUI开发的程序员参考。

weixin_30872499的博客 410

GTK+、glade学习(C、Python实现)

最近在搞LinuxCNC界面开发,费劲千辛万苦找的几个不错的资料整合,包含Glade入门教程、PyGTK教程等6个文档,都不重复,很不错的学习资源

gtk读取glade文件

先用glade绘制我们需要的图然后,用gtk读取glade文件,获取glade中的按钮,做相应的事情

glade使用与GTK+学习初步

1.使用glade进行绘制UI 2.将形成的文件另存为,chongmingming

hellobeifeng的专栏 9645

使用Glade和libGlade设计Gtk+图形界面

张威、曹剑   Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。  一、Glade简介  如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想。  在Windows环境下,这

shanyou的专栏 5808

Linux界面开发_GTK+&glade_1_环境配置与简介

目录 Linux界面开发_GTK+&glade 第一篇:环境配置与简介 1.1 GTK+简介 1.2 GLADE简介 2 环境配置 2.1 在debian linux上配置GTK+3.0(这是目前gtk+最新版本) 2.1.1 安装开发所需依赖库 2.1.2 使用apt软件管理包安装 2.2 安装GLADE Linux界面开发_GTK+&glade 第一篇:环境配置与简介 1.1 GTK+简介 GTK+是通用跨平台界面库,它支持windows以及mac os和.

17岁boy的博客 1447

gtk/glade程序开发(一)

转自 http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=kylix&Number=566950&page=0&view=collapsed&sb=4&o=all&fpart=all&vc=1 by cuigf 我已经安装好gtk2.0/glade2.10.0,系统环境 RH9 准备用一个月

IT老兵 8910

Linux gtk开发教程,使用GTK+和Glade快速开发Linux图形界面

使用GTK+和Glade快速开发Linux图形界面Glade,GTK,Linux,draft,图形* 使用 GTK+ 和 Glade 快速开发Linux图形界面** GTK+ 简介*** 基本概念GTK+ 是一种用于创建图形界面的库. 嗯, gnome 用的就是它, 不过并不是说只有在 gnome 环境中才能用, 只要系统上装有 GTK 的库 (基本上有图形系统的个人机都会有的啦) 就能运行基于 ...

weixin_36221113的博客 1477

Glade的简单使用说明+例子(一)

Glade的简单使用说明+例子 Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求 一、Glade简介  如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想。 

dllbl的专栏 5478

使用GTK+和Glade快速开发Linux图形界面

* 使用 GTK+ 和 Glade 快速开发 Linux 图形界面** GTK+ 简介*** 基本概念GTK+ 是一种用于创建图形界面的库. 嗯, gnome 用的就是它, 不过并不是说只有在 gnome 环境中才能用, 只要系统上装有 GTK 的库 (基本上有图形系统的个人机都会有的啦) 就能运行基于 GTK 的程序. 除了 UNIX-like 平台, 它还移植到 win

Just Programming Myself (c_spark) 7537

linuxgtk开发环境搭建

环境搭建 安装必要的工具 apt install libgtk-3-dev pkg-config 可以安装额外的example包,里面提供的一些demo程序是非常好的参考 apt install gtk-3-examples gtk-3-examples包中的hello-world.c程序 #include <gtk/gtk.h> static void print_hello ...

faxiang1230的专栏 1863

linux C语言编程 Glade gtk

这几天在学习linux 编程 学到了图形界面这一块 所以很快的接触到了 Glade 这个东西 ,开始一直困惑glade产生的xml格式的代码如何加到c语言程序中,几经周折,总于在这个点弄完了,自己总结一下 希望给其他的初学者一点帮助 别的不说:gtk一次性安装成功 glade 是系统自带的,我的系统是ubuntu的 一.用glade创建   一个保存命名为“window.glade” (最简

春秋战车 1971

glade画的gtk界面python里能直接调用

glade画的gtk界面python里能直接调用

qiaozhangchi的专栏 618

简易版GTK安装,Linux、Windows平台

你可以选择Linux或Windows(需要)系统。

土豆~的博客 1988
上一篇: 对于linux下system()函数的深度理解(整理)
下一篇: 如何使Android应用程序获得root权限
David_Beckdong
博客等级 码龄14年 94粉丝 2原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值