Matlab-GUI编程:简单计算器的实现

前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了。上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来。这学期接触了matlab,虽然他号称是面向对象的编程语言,但还是跟java,python有很大区别,在我看来,他方法调用上其实又有些像C语言实现闭包的方式。而在对象的操作上又跟java等面向对象一致。

刚入门的matlab,发现这门语言(或者叫软件)其实很容易上手,java中很难实现的计算器在matlab这个“半可视化”的GUI编程中很快就实现了。

第一篇文章献给matla ,大牛不要嘲笑哦~

界面准备

这就跟java很不一样了,java的一切空间都是需要自己创建的对象,而matlab提供一个类似画图界面的操作窗口可供用户可视化操作,当然他背后的.m文件也会自动相应地生成功能函数。

别吐槽。我知道巨丑....

Matlab-GUI编程:简单计算器的实现_第1张图片
计算式框和结果框都是静态文本,下面按钮使用pushbutton

当然,控件的样式操作也很方便,直接调出控件的属性查看器,直接修改样式属性。(有一种ppt的感觉有没有。。。)

Matlab-GUI编程:简单计算器的实现_第2张图片
属性查看器界面

相当于这个控件对象的一些属性可以在这个界面人工修改。例如string属性是控件静态显示文本,java里面需要调用setText(j)方法来设置。比较重要的是tag属性,相当于对象的名字,最开始都是系统自动起的名字。对象名当然很重要,不知道对象名怎么调用属性?怎么调用方法?

功能代码实现

计算器啥功能?基本的运算,得出一个多项式结果后还能接着这个结果运算是吧?当然最开始还得实现出发button传值是不,我们一步一步来实现:

首先一个比较重要的功能就是,控件相应功能的函数位置,因为创建控件后,matlab会自动地在.m文件中写入对象的初始化函数、回调函数(相当于java中的事件监听函数)。

右键控件->查看回调->callback,然后matlab脚本编辑页面会自动跳转至相应的代码行,这个函数下的代码就是当你触发这个控件时所执行的代码。

控件传值

首先要做的是将数字、运算符按钮上的值传到计算框内:

```matlab

function pushbutton8_Callback(hObject, eventdata, handles)

s1=get(handles.text2,'string')

s2=get(hObject,'string')

set(handles.text2,'string','')

set(handles.text2,'string',strcat(s1,s2))

```

这个比较简单,就是set(对象名,属性名,属性值)   get(对象名,属性名)的使用,这两个函数在GUI编程中是最常用的。当然这个调用对象属性的风格颇像C语言...

算术表达式的运算

前面所有的数字、运算符的传递到静态文本框内的都是string格式,那么怎么计算这个字符串格式的算术式从而显示结果到结果框中呢?

嗯,巧了,正在修的数据结构(使用C语言)告诉我,利用堆栈数据结构将字符串转化成后缀表达式,再出栈运算..... 

但是matlab作为一个重达几个G的软件不会连这个都要我们自己编算法吧?

好的,肯定不会 ,下面的eval函数就是这功能:

```matlab

str=get(handles.text2,'string')

answer=eval(str)

set(handles.text4,'string',num2str(answer))

```

来,我们先看下目前的效果:


Matlab-GUI编程:简单计算器的实现_第3张图片
恩,并不知道怎么让文字垂直居中...

连续运算

接下来解决的就是连续运算了,就是接着上步结果接着算。那么要干两件事:上步结果显示在输入框内、符号键第二次点击执行不同的代码。

比较难做到的就是第二点。比如我们第一次点击“+”时,是正常的运算。运算完结果后,第二次再点击+时应该接着上步运算,此时执行的代码就不一样了。

我解决的办法是设置全局变量,  每个运算符回调函数下设置 global i=0,执行完第一次之后把i置1;当然AE按钮执行后要重新置成0;

这样运算符的代码修改为这样:

```matlab

global i

if i==0

s1=get(handles.text2,'string')

s2=get(hObject,'string')

set(handles.text2,'string',strcat(s1,s2))

else

set(handles.text2,'string','')

s=get(handles.text4,'string')

ss=get(hObject,'string')

set(handles.text2,'string',strcat(s,ss))

end

i=i+1

```

 现在的效果:


Matlab-GUI编程:简单计算器的实现_第4张图片
 实现连续计算

这样就差不多了,然而有个bug,就是这样一来输入框就只能进行二项式的运算了,多项式如果第二次输入同一个运算符就gg了。这就需要再计算按钮上再设置计数器,然后在在运算按钮上加条件判断....

好吧,接下来的就不写了,因为GUI只要掌握图形界面背后代码是怎样实现的就ok了。

matlab比较好入门,然而精通他还是很难的。更要命的是数学要好呀,线性代数balabal.....

你可能感兴趣的:(Matlab-GUI编程:简单计算器的实现)