Gtk+-3.0实例4.使用GtkGrid和GtkTable制作简单计算器界面

本文提供了一个使用GtkGrid在C语言中创建简单计算器界面的实例。代码通过gtk_grid_attach函数布局按钮,实现网格中的按钮排列。程序创建一个4x4的网格,并填充数字和运算符按钮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gtk+-3.0实例4.使用GtkGrid和GtkTable制作简单计算器界面

1.代码说明

  • GtkTable的创建与使用
  • GtkGrid的创建与使用
  • 主要函数说明
//Adds a widget to the grid.
void
gtk_grid_attach (GtkGrid *grid,
                 GtkWidget *child,
                 gint left,
                 gint top,
                 gint width,
                 gint height);
  • 参数说明
    子构件child的位置由lefttop的值决定,每个子构件,这里主要指网格中的每个按钮所占网格 “cells” 的数量由widthheight决定 .
    grid:a GtkGrid 网格部件
    child:the widget to add 网格中要添加的小部件
    left:the column number to attach the left side of child to 小部件左侧关联的列号
    top:the row number to attach the top side of child to 小部件顶部关联的行号
    width:the number of columns that child will span 小部件所占列的数量
    height:the number of rows that child will span 小部件所占行的数量

2.源码如下

//buttons with table/grid in window (calculator.c)
#include <gtk/gtk.h>

int main (int argc,char *argv[])
{
	GtkWidget *window;
	//GtkWidget *table;
	GtkWidget *grid;
	GtkWidget *button;

	gchar *values[16]={"7","8","9","/",
					   "4","5","6","*",
					   "1","2","3","-",
					   "0",".","=","+",};
	
	gtk_init (&argc, &argv);
	
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	//gtk_window_set_title (GTK_WINDOW (window), "Calculator in GtkTable");
	gtk_window_set_title (GTK_WINDOW (window), "Calculator in GtkGrid");
	gtk_window_set_default_size (GTK_WINDOW(window),260,180);
	gtk_container_set_border_width (GTK_CONTAINER (window), 5);
	gtk_window_set_position (GTK_WINDOW (window),GTK_WIN_POS_CENTER_ALWAYS);

	//从gtk3.4开始,已放弃使用GtkTable,建议使用GtkGrid,但该小部件目前仍能使用
	//table=gtk_table_new (4,4,TRUE);
	//gtk_table_set_row_spacing (GTK_TABLE(table),4,2);
	//gtk_table_set_col_spacing (GTK_TABLE(table),4,2);

	grid=gtk_grid_new ();
	gtk_grid_set_row_spacing (GTK_GRID(grid),2);
	gtk_grid_set_column_spacing (GTK_GRID(grid),2);

	gint pos=0;
	for(gint i=0;i<4;i++)
		for(gint j=0;j<4;j++)
		{
			button=gtk_button_new_with_label(values[pos]);
			gtk_widget_set_hexpand (button, TRUE);
			gtk_widget_set_vexpand (button, TRUE);
			//gtk_table_attach_defaults (GTK_TABLE(table),button,j,j+1,i,i+1);
			gtk_grid_attach(GTK_GRID(grid),button,i,j,1,1);
			pos++;
		}
	
	g_signal_connect (G_OBJECT (window), "destroy",
	                  G_CALLBACK (gtk_main_quit), G_OBJECT(window));
	
	//gtk_container_add (GTK_CONTAINER (window), table);
	gtk_container_add (GTK_CONTAINER (window), grid);
	gtk_widget_show_all(window);
	gtk_main ();
	return 0;
}

3.运行结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值