【问题标题】:How to do GUI programming in matlab如何在matlab中进行GUI编程
【发布时间】:2012-11-24 08:42:17
【问题描述】:

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

这是我制作的 GUI

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”的名称保存了给定的 GUI 并创建了 add.m 。你能告诉我如何为给定的 gui 进行编程吗?

【问题讨论】:

标签: matlab matlab-guide


【解决方案1】:

matlab gui编程的基本思路如下:

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

这两个步骤都通过使用 matlab gui 编辑器(指南)来处理。重要的是您将程序流的控制权交给了消息循环。为了完成任务,您可以告诉消息循环在发生任何事情时调用一个函数。

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

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

我猜你希望发生以下情况:

  1. 获取edit1和edit2的字符串值
  2. 将字符串转换为数值
  3. 执行计算
  4. 将 text3 的字符串值设置为结果的字符串表示形式

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

在 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。当您在 guide 中创建新按钮并在属性编辑器中分配标签“clickme”时,guide 将创建按钮并将句柄存储在 structure handles.clickme 中。如果您仍然记得分配给它的标签,那么这为您提供了一种简单的方法来获取您创建的任何小部件的句柄。

我们来看函数的第一行:

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

这会调用函数get 并使用一些您不应该关心的数字,只要它与matlab 与edit1 小部件关联的数字和属性编辑器中的属性名称相同,在本例中为“字符串”。这与您单击所有窗口元素直到属性编辑器显示标签“edit1”并为该对象找到名为“String”的属性的值相同。

每当您输入新文本、移动滑块、更改窗口大小等时,属性都会自动更新。它也可以反过来工作。如果您使用set( handles.edit1, 'Position', [20 20 100 30]) 修改'Position' 属性,则小部件会自动移动并重新调整到指定位置。

【讨论】:

  • 嘿,谢谢你的代码..我试过了,它的工作原理..但是你能解释一下代码吗! ;什么是handles.edit1,handles.edit2 和handles.result 它有什么作用
  • 我已经扩展了答案。我希望它不会太混乱。如果是,请尝试做一些非常简单的事情。绘制一些东西,在命令窗口中输入 gcf 以获取当前图形的句柄或 gca 以获取当前轴的句柄。然后尝试 get(gcf),它将生成包含所有属性的文本墙。
猜你喜欢
  • 2011-07-23
  • 2010-11-10
  • 2015-04-06
  • 2023-03-21
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
相关资源
最近更新 更多