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

GTK+-3.0学习笔记(三)——Packing GTK+-3.0学习笔记(二)——Packing 参考自官方文档 本文基于前两篇文章,主要介绍GTK中的部件打包方式。 所有的打包方式见这篇文章 本文主要使用一个示例代码对Grid方式进行讲解 创建一个grid容器:gtk_grid_new() 为窗口增加子容器:gtk_container_add(GTK_CONTAINER(window), grid); 为Grid容器增加部件:gtk_grid_attach(GTK_GRID(grid), button, left, top, width, hight) 阅读详情

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的位置由left 和 top的值决定,每个子构件,这里主要指网格中的每个按钮所占网格 “cells” 的数量由width 和 height决定 .
    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.运行结果

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

GTK3.0高级控件(万字详解+源码) 3.4.1 GTK3.0的GtkTreeView:树视图 3.4.1 GTK3.0的GtkListBox:列表框 3.4.1 GTK3.0的GtkFlowBox:流动框 3.4.1 GTK3.0的GtkIconView:图标视图 3.4.1 GTK3.0的GtkSpinButton:旋转按钮(数值输入) 3.4.1 GTK3.0的GtkSpinner:旋转器(加载动画) 3.4.1 GTK3.0的GtkFrame:框架 3.4.1 GTK3.0的GtkAspectFrame:宽高比框架 3.4.1 GTK3 阅读详情

相关推荐

gtk3.0入门看这一篇就够(十万字总结+源代码)

GTK(GIMP Toolkit)是一个用于创建图形用户界面(GUI)的跨平台工具包,主要用于Linux环境。GTK 3.0 是该工具包的一个版本,提供了一系列用于构建现代化、用户友好的应用程序界面的功能。

啊渊的专栏 3740

Linux 图形化编程GTK3.0 快速入门之布局

水平布局容器:水平布局容器的创建:homogeneous:容器内控件是否大小一致( gboolean 取值为TRUE 或 FALSE )spacing:控件之间的间隔( 以像素点为单位 ),gint相当于 C语言的int返回值:水平布局控件指针容器添加添加控件:container:容纳控件的容器widget:要添加的控件显示容器上所有控件widget:需要显示的控件。

zhouzhiwengang的专栏 1961

GTK4 UI设计

本文介绍GTK4中使用Glade设计.ui文件并通过GTK Builder加载的界面开发方式。相比纯代码创建,该方法实现可视化设计、界面与逻辑分离,提升开发效率与可维护性。文章详解.ui文件结构、常用属性及实际应用案例,强调推荐使用.ui后缀以确保兼容性,并指出其在团队协作、原型开发和主题切换中的优势。

OneSea 1050

gtk3基础知识的学习(C语言)

gtk3基础知识学习笔记(C语言版) 使用环境:visual studio2019 + windows10

weixin_48842132的博客 4452

GTK+3.0详细的说明文档

学习GTK3.0必备的资料,这个说明文档很好使用的

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码)

【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码)

weixin_61226361的博客 3597

gtk+ Windows下的安装配置

gtk在win11下的配置

m0_47015507的博客 3792

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

本文深入解析SAP ABAP开发中调用BAPI_MATVAL_PRICE_CHANGE函数时遇到的'估价未维护'错误,提供从基础配置检查到CKML_PRICE_SEND表维护的完整解决方案。通过实战案例和代码示例,帮助开发者快速定位问题并实现批量价格更新的自动化处理,提升开发效率。

weixin_28705087的博客 427

GTK3.x/4.x简单教程(一)

MSYS2环境下安装Gtk+-4.0和Glade

CS_Jack的专栏 1316

GitHub与GitLab中的Fork操作:从个人仓库到团队协作的完整指南

本文详细介绍了GitHub与GitLab中的Fork操作,从个人仓库到团队协作的完整指南。通过Fork操作,开发者可以在权限隔离的环境下自由实验,并通过合并请求机制保证代码质量。文章涵盖了Fork的具体步骤、本地开发环境配置、代码同步方法以及高级协作技巧,帮助团队高效管理代码仓库。

weixin_28829325的博客 306

【Shader】Unity批量更换Shader

在Unity开发中,因为渲染管线问题,经常会遇到需要大量更改shader的问题,本篇文章讲述批量更换Shader的工具。

憨辰 1467

gtk_table_attch与gtk_grid_attach的区别

gtk_table_attch与gtk_grid_attach的区别

weixin_42145772的博客 523

【2022KaliLinux】openvas/gvm 没有scan configs 或者是 scan config error “XXXXXXXXXXX”

gvm/openvas的configuration的scan config为空

zbossz的学习小分队 3606

GTK+2.0/3.0/4.0学习资料

GTK+2.0/3.0/4.0学习资料

CS_Jack的专栏 1121

13、数据来源介绍与操作指南

本文详细介绍了多种数据源的特点、操作步骤及适用场景,包括元数据数据源、MongoDB数据源、Pentaho Data Integration数据源、OLAP数据源、Pentaho分析数据源和OLAP4J数据源。通过流程图和表格对比,帮助用户理解不同数据源的选择与使用方法,并提供了实际应用案例和注意事项,旨在提升数据获取与分析效率,支持高效报告生成。

ik678901234的博客 150

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6667

GTK3.0学习第一天---环境配置

配置安装gcc/g++/gdb/make 等基本编程工具 sudo apt-get install build-essential 安装GTK/GNOME开发环境 sudo apt-get install gnome-devel gnome-devel-docs 安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库 sudo apt-get install glade libg

小坤的博客 1446

ubuntu 安装node和npm

在ubuntu中经常需要用到node ,npm,因为npm基本会和node同时安装,所以只需要安装node即可。可以使用 nvm(Node Version Manager)来管理你的 Node.js 版本。

风吹落叶的博客 2292

gtk-3.0学习笔记3-布局始

创建应用程序时,您需要在窗口中放置多个窗口小部件。当您要将多个窗口小部件放入窗口时,控制每个窗口小部件的位置和大小变得非常重要。这是包装进来的地方。 GTK +带有各种各样的布局容器 ,其目的是控制添加到其中的子窗口小部件的布局。#include <gtk/gtk.h>static void print_hello (GtkWidget *widget, gpointer

柠檬说葡萄你好酸 675

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GtkGrid gtk_grid_attach

void gtk_grid_attach (GtkGrid *grid, GtkWidget *child, gint left, // 左,相当于第一列,从0开始,跟数组一样 gint top, // 上,相当于第一行,从0开始 gint width, gint height); // demo.c #include <gtk/

weixin_44374594的博客 706

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c++/C语言之内联函数

内联函数 在类声明内定义内联函数 内联函数 在C++中,用户可以创建实际上不调用的短函数,他们的代码在每次调用的程序行里得到扩展。这个过程类似于使用类似函数的宏。为使一个函数在程序行进行代码扩展而不被调用,只要在函数前面加上关键字inline即可。   例如,在下面的程序,函数max()在行内扩展而不被调用: #include <iostream> using namespace std; inline int max(int a, int b) { return a>b?a:b;

zhang2039的博客 561

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用gtk库时需要注意的地方

1、#include ,很多介绍gtk编程的教科书中都写成#include ,这是因为通过yum安装的gtk.h位于/usr/include/gtk-2.0/gtk/gtk.h这个位置,而不是/usr/include/gtk/gtk.h.所以,这一步一定要谨慎。 2、通过gcc来编译程序; 输入:gcc -o test test.c `pkg-config --cflags --libs

dai的专栏 656

linux下使用C语言进行GTK桌面程序开发

简略的总结了linux环境下GTK的安装步骤和GTK使用方法的相关资料,并在最后贴上了一个使用demo

我要出家当道士 4053

GTK 菜单的创建详解

1 定义 1.1 菜单由菜单条和菜单项组成,它们的定义如下所示: 菜单项(GtkMenuItem):添加到菜单条或下拉菜单中构件 顶层菜单项:添加到菜单条上的菜单项称为顶层菜单项 下拉菜单(GtkMenu):当鼠标移动到某个菜单项后显示出来的菜单(GtkMenu)称为下拉菜单。它通常用来作为放置菜单项的容器 1.2 菜单的创建 创建一个菜单条 往菜单条上添加菜单项(顶层菜...

weixin_38166557的博客 296

GTK3的配置

超级详细的在windows环境下使用Visual Studio2019引入gtk3库教程

weixin_48842132的博客 3187

gtk学习总结:GTK从入门到放弃,三天包教包会

今天花了一些时间复习之前学习过的gtk,感觉东西光学不用忘得好快啊,在这做个之前学过的内容的备份,希望对大家有用,也希望大家不要从入门到放弃。文中有些代码例子可能来自《GTK从入门到精通》吧,我不记得了,或者叫《GTK中文教程》,忘记了,总之,这是一个学习笔记,希望不触及任何人的利益,起到共享学习之用。 目录 编译方法 编译脚本 01.一个简单的按钮 02.两个按钮 03.vbox:一...

RToax 4万+
上一篇: Gtk+-3.0实例3.在fixed小部件中移动buttons
下一篇: Gtk+-3.0实例5.Signals/Callback/Data的使用说明
CS_Jack
博客等级 码龄16年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值