将编辑uicontrol字符串传递给Matlab中另一个uicontrol的回调

时间:2014-10-27 15:09:31

标签: matlab callback

我在Matlab中写了这样的代码:

function[] = gui_function()
window.value1 = uicontrol('style', 'edit', ...
                          'string', '5', ...
                          'callback', @is_number);
window.computeButton = uicontrol('style', 'push', ...
    'callback', {@test_script, str2double(get(window.value1, 'string'))});
end

function[] = test_script(varargin)
value1 = varargin{3};
end

我想将文本从编辑uicontrol传递给Button的回调。当我按照以下方式执行时,传递的值是在声明uicontrol时设置的旧值。 所以即。我运行GUI并在编辑中具有值5。我将其覆盖为20,但在按下按钮后,传递的值仍为5

这种方法有什么问题?如何以不同的方式完成? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,使用GUI时的最佳选择是使用GUI的句柄结构,其中除了(很酷的部分)之外,每个uicontrol都与其相关属性一起存储。你想存储它,比如变量。

所以我修改了一些代码来使用句柄结构。我并不完全清楚你想要什么,但在我的例子中,按钮用于使用第一个编辑框的内容更新第二个编辑框的内容。这非常基础,但它应该可以帮助您了解手柄和手柄结构。如果有什么不清楚请告诉我!

function gui_function()


ScreenSize = get(0,'ScreenSize');

handles.figure = figure('Position',[ScreenSize(3)/2,ScreenSize(4)/2,400,285]);


handles.Edit1 = uicontrol('style', 'edit','Position',[100 150 75 50], ...
    'string', '5');

handles.Edit2 = uicontrol('style', 'edit','Position',[100 80 75 50], ...
    'string', 'Update me');

handles.computeButton = uicontrol('style', 'push','Position',[200 100 75 75],'String','PushMe', ...
    'callback', @PushButtonCallback);


guidata(handles.figure, handles); %// Save handles to guidata. Then it's accessible form everywhere in the GUI.

function PushButtonCallback(handles,~)

handles=guidata(gcf); %// Retrieve handles associated with figure.

TextInBox1 = get(handles.Edit1,'String');
set(handles.Edit2,'String',TextInBox1); %// Update 2nd edit box with content of the first.

%// Do whatever you want...
guidata(handles.figure, handles); %// DON'T forget to update the handles structure

您可以通过添加函数回调(test_script)来自定义此GUI,就像我实现PushButtonCallback一样。希望我理解你想要的东西:)