簡體   English   中英

在Matlab中從不同的GUI調用GUI函數

[英]Calling GUI function from different GUI in Matlab

我有兩個GUI文件,如下所示:

gui1.m

function varargout = gui1(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @gui1_OpeningFcn, ...
                   'gui_OutputFcn',  @gui1_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 gui1_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

function varargout = gui1_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;

function text_Callback(hObject, eventdata, handles)



function text_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


function pushbutton1_Callback(hObject, eventdata, handles)

a = get(handles.text,'String');
disp(a);

這個gui1.m有一個編輯框和一個按鈕,當我單擊pushbutton1它就會顯示它的內容。 現在,我嘗試使用以下代碼對不同的GUI界面執行相同的操作。

gui2.m

function varargout = gui2(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @gui2_OpeningFcn, ...
                   'gui_OutputFcn',  @gui2_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 gui2_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

function varargout = gui2_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;


function pushbutton1_Callback(hObject, eventdata, handles)

gui1('pushbutton1_Callback', hObject, eventdata, handles);

所以當我單擊gui2.m的按鈕pushbutton1gui2.m以下錯誤

Reference to non-existent field 'text'.

Error in gui1>pushbutton1_Callback (line 44)
a = get(handles.text,'String');

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in gui1 (line 17)
    gui_mainfcn(gui_State, varargin{:});

Error in gui2>pushbutton1_Callback (line 32)
gui1('pushbutton1_Callback', hObject, eventdata,
handles);
Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in gui2 (line 16)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)gui2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating uicontrol Callback

誰能告訴我問題是什么? 因為當我刪除該set並為gui1.m中的變量a分配一些數字並按gui2.m中的按鈕時,我能夠顯示a的值。

你需要兩個GUI之間共享數據:傳遞數據(本地數據gui1要共享共享變量(即) MySharedData中) gui1pushbutton1_Callback功能,並調用gui2; 而不是gui1('pushbutton1_Callback', hObject, eventdata, handles); 然后在gui2pushbutton1_Callback可以檢索共享數據MySharedData ,做你想要的數據是什么。

有一些說明:

http://www.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html

http://www.mathworks.com/matlabcentral/answers/338-how-to-pass-data-from-one-gui-to-another

更新:

更簡單的方法,但我認為不太可靠:當您調用gui1的按鈕時,將值分配給工作空間的變量( assignin('base', 'varname', value) ),然后在gui2的按鈕CallbackFcn中可以獲取val = evalin('base', 'varname')的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM