2012-11-24 56 views
1

我想学习matlab中的GUI编程,为此我试图创建一个简单的乘法计算器。我在没有GUI的matlab中完成了一些程序,但是我很难理解Matlab中的GUI编程。我已经创建了GUI,但我不知道如何为此编程。如何在matlab中进行GUI编程

这是我的GUI我做 enter image description here

EDIT TEXT 1; string= 0 
EDIT TEXT 1; tag= edit1 
EDIT TEXT 2; string= 0 
EDIT TEXT 2; tag= edit2 
STATIC TEXT 1; string= X 
STATIC TEXT 1; tag= text3 
STATIC TEXT 2; string= 0  (for showing results) 
STATIC TEXT 2; tag= result 
PUSHBUTTON; String= Calculate 
PUSHBUTTON; tag=push_calc 

我在 “添加”,创建add.m的名称保存给定的图形用户界面。你能告诉我如何为给定的gui编程吗?

+0

我想你已经看到了这个:http://www.mathworks.com/matlabcentral/fileexchange/24861-41-complete-gui-examples – 0x90

+0

@ 0x90我已经看到它,但它仍然令人困惑,你可以帮我上面gui? – Eka

回答

2

MATLAB GUI编程的基本思想是:通过使用MATLAB GUI编辑器

  1. 设置的数字
  2. 输入消息循环

两个步骤的悉心照料(指南)。重要的是您将程序流程的控制权交给了消息循环。为了完成任务,您可以告诉消息循环在发生任何事情时调用函数。

在gui编辑器中,右键单击您的按钮并选择“查看回调 - >回调”。这会自动在你的.m文件中创建一个这样的功能,你可以指定当你按下按钮时会发生什么。

为了更好的理解,请看看按钮的Callback属性。指南将输入类似add('push_calc_Callback',hObject,eventdata,guidata(hObject))的内容,它将主函数(add)作为新回调函数的包装器。你可以在属性编辑器中自己完成,或者以编程方式在启动代码中完成。

我猜你想要的以下情况发生:

  1. 获取EDIT1的字符串值和EDIT2
  2. 转换字符串到数字值
  3. 进行计算
  4. 设置的字符串值text3到结果的字符串表示法

您可以访问gui元素的属性通过使用可用的句柄作为第三个函数参数和get和set函数。手柄结构由指南创建,元素的名称与您指定的标签相同。

在MATLAB代码,这可能是这样的:

% --- Executes on button press in push_calc. 
function push_calc_Callback(hObject, eventdata, handles) 
% hObject handle to push_calc (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
x_string = get(handles.edit1, 'String'); 
y_string = get(handles.edit2, 'String'); 

x_numeric = str2num(x_string); 
y_numeric = str2num(y_string); 

result_numeric = x_numeric * y_numeric; 
result_string = num2str(result_numeric); 

set(handles.result, 'String', result_string); 

编辑:的问题是什么是handles.edit1等。 每当你想用一个按钮或文本框等小部件来做某件事时,你必须能够准确地告诉matlab你的意思是什么部件。指南在幕后做了一些事情。其中之一是拨打uicontrol,它创建小部件并返回一个随机但唯一的号码。这有点像一个银行帐号,它的方式是一个handle到可以用来操纵它的资源。当您在指南中创建新按钮并在属性编辑器中指定标记“clickme”时,指南创建按钮并将手柄存储在structurehandles.clickme中。如果你仍然记得你分配了什么标签,那么这给你一个简单的方法来获得你创建的任何小部件的句柄。

让我们的函数的第一行:

x_string = get(handles.edit1, 'String'); 

与一些你不应该在乎数量,只要调用函数get,因为它的相同数量的MATLAB与带EDIT1控件和属性名称来自属性编辑器,在这种情况下是'String'。这将与单击所有窗口元素相同,直到属性编辑器显示“edit1”标签,并且为该对象找到名为“String”的属性的值。

无论何时键入新文本,移动滑块,更改窗口大小等,属性都会自动更新。它也适用于其他方式。如果您使用set(handles.edit1, 'Position', [20 20 100 30])修改'位置'属性,那么窗口小部件会自动移动并重新调整大小到指定的位置。

+0

嘿感谢代码..我试了一下,它的工作..但你能解释代码! ;什么是handles.edit1,handles.edit2和handles.result它做什么 – Eka

+1

我已经扩大了答案。我希望这不是太混乱。如果是,请尝试做一些非常简单的事情。绘制一些东西,在命令窗口中键入gcf以获取当前图形的句柄或gca以获取当前轴的句柄。然后尝试获取(gcf),这将产生一个包含所有属性的文本墙。 – mars

+0

感谢您的解释:) – Eka