我一直在尝试编程一个GUI,它应该接收一个变量作为输入,并执行生成另一个变量的几个操作。GUI将有一个关闭GUI的按钮。
我不(也不想)使用GUIDE。
下面,我提供了一个GUI的最小工作示例,它只是将1添加到输入变量中。"完成"按钮关闭GUI,但我找不到一种方法将变量导出到工作空间。
% Is this the correct way to initialize the function for what I am trying to do?
function outputVariable = exampleGUI(inputVariable)
% Initialize main figure
hdl.mainfig = figure();
% Add Button
hdl.addPushButton = uicontrol(hdl.mainfig, 'Units', 'normalized',
'Position', [0.05 0.6 0.3 0.25], 'String',
'Add One', 'Callback', @addOne);
% Done Button
hdl.donePushButton = uicontrol(hdl.mainfig, 'Units', 'normalized',
'Position', [0.65 0.6 0.3 0.25], 'String',
'Done', 'Callback', @done);
% Static text
hdl.sliceNoText = uicontrol(hdl.mainfig, 'Style', 'text',
'Fontsize', 16, 'Units', 'normalized',
'Position', [0.35 0.2 0.3 0.25]);
function addOne(~, ~, ~)
inputVariable = inputVariable + 1; % add one to the current inputVariable
set(hdl.sliceNoText, 'String', num2str(inputVariable)); % change static text
newVariable = inputVariable; % new variable to be exported
end
function done(~, ~, ~)
delete(hdl.mainfig); % close GUI
end
end
我想这样做:
在工作区中:
outputVariable = exampleGUI(inputVariable)
在为输入变量添加了一定次数后,我将按下"Done"按钮,GUI将关闭,工作区将包含inputVariable和outputVariable。
谢谢你。
fnery
这是您可以做的一个示例。你可以做很多事情来实现你想要的功能。通常我不喜欢在整个函数的工作空间中除了输入和输出以及guidhandles之外有任何变量。我使用setappdata
和getappdata
来存储其他变量,并允许回调访问它们。这取决于您,但以下是如何使您的简单gui工作的示例。CloseRequestFcn
允许您处理如果用户刚刚关闭gui会发生什么。希望这对你有所帮助。另外,waitfor
阻止函数返回,直到函数关闭。如果你愿意,你也可以将图形的'WindowStyle'
属性设置为'modal'
,以强制用户在关闭gui之前输入。
function outputVariable = exampleGUI(inputVariable)
% Any variables declared here will be accessible to the callbacks
% Initialize output
outputVariable = [];
% Initialize newVariable
newVariable = [];
% Initialize main figure
hdl.mainfig = figure('CloseRequestFcn',@closefunction);
% Add Button
hdl.addPushButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.05 0.6 0.3 0.25], 'String', 'Add One', 'Callback', @addOne);
% Done Button
hdl.donePushButton = uicontrol(hdl.mainfig, 'Units', 'normalized', 'Position',[0.65 0.6 0.3 0.25], 'String', 'Done', 'Callback', @done);
% Static text
hdl.sliceNoText = uicontrol(hdl.mainfig,'Style','text','Fontsize',16,'Units','normalized','Position',[0.35 0.2 0.3 0.25]);
function addOne(hObject,eventdata)
inputVariable = inputVariable+1; % add one to the current inputVariable
set(hdl.sliceNoText, 'String', num2str(inputVariable)); % change static text
newVariable = inputVariable; % new variable to be exported
end
function closefunction(hObject,eventdata)
% This callback is executed if the user closes the gui
% Assign Output
outputVariable = newVariable;
% Close figure
delete(hdl.mainfig); % close GUI
end
function done(hObject,eventdata)
% Assign Output
outputVariable = newVariable;
% Close figure
delete(hdl.mainfig); % close GUI
end
% Pause until figure is closed ---------------------------------------%
waitfor(hdl.mainfig);
end