首页 > 解决方案 > 在 Matlab 中将 GUI 链接在一起

问题描述

我正在尝试在 matlab 中创建一个程序,将几个经过测试的、功能正常的 GUI 链接在一起,但我遇到了一些麻烦。

在一个功能中,我有:

global Status;
global value1;
Status = 'setup';


switch Status
    case 'setup'
        ADone = ASetup; %Calls setup function which should return a value when done
        if strcmp(ADone, 'yes')==1
            Status = 'Pos1';
        end
    case 'Pos1'
        value1 = OHMgui1;
        Status = 'Pos2';
    case 'Pos2'
       %Still work in progress 
end        

在我的 Asetup 函数中,我有:

function done = ASetup



AStatus = GUI1; 
BStatus = GUI2();
CStatus = GUI3();
DStatus = GUI4();

%Up until here everything goes as intended
Refstatus = RefGUI();




done = 'yes'; %Returns value when finished

disp (done) %Check statement, does not execute, error happens somewhere before here

end

GUI 1-4 基本上只显示带有 OK 按钮以关闭它们的参考图像,我通过使用 uiwait() 来控制它们,并在按下 OK 按钮时让它们设置一个返回值(以确保直到上一个已关闭)。这完全符合我的要求。

但是对于 RefGUI,我使用继续和关闭按钮创建它。我希望用户能够在 RefGUI 保持打开状态时单击继续并让程序继续运行。理想情况下,这将导致调用 OHMGUI1,但它似乎甚至不显示检查语句。

我怀疑错误出现在 RefGUI 中,它在正确的时间打开,但是在按下继续或关闭按钮后我什么也没有发生(除了在程序不继续的情况下关闭 GUI)。它的代码是:

function varargout = RefGUI(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @ClampRef_OpeningFcn, ...
                   'gui_OutputFcn',  @ClampRef_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end



function RefGUI_OpeningFcn(hObject, eventdata, handles, varargin)
matlabImage = imread('C:...reference.jpg');
image(matlabImage)
axis off
axis image
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
set(handles.pushbutton2,'enable','off') %Disable close button until continue is pressed



function varargout = RefGUI_OutputFcn(hObject, eventdata, handles) 

uiwait();
global valueout;
varargout{1} = valueout;
%I have also tried disabling the above 3 lines with no difference.

function pushbutton1_Callback(hObject, eventdata, handles)
global valueout;
valueout = 'Finished';
set(handles.pushbutton2,'enable','on') %enable close button
set(handles.pushbutton1,'enable','off') %disable continue button
return



function pushbutton2_Callback(hObject, eventdata, handles)
closereq(); %close button closes GUI window

我可以做些什么来使程序按预期继续?

标签: matlab

解决方案


推荐阅读