我在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
这种方法有什么问题?如何以不同的方式完成? 提前谢谢!
答案 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一样。希望我理解你想要的东西:)