2016-09-14 64 views
0

我一直在試圖從一個外部函數得到一個繪圖到一個GUI內的軸。我是而不是使用GUIDE。我曾嘗試多種方法,但我不斷收到錯誤從外部函數繪製到軸matlab GUI

Not enough input arguments. 

Error in dummyGUI/plotButton_callback (line 19) 
    set(hfigure,'CurrentAxes',handles.axes1) 

現在我已經做了一個假的GUI和劇情在命令窗口中進行,但我不能擺脫掉的錯誤。

我的代碼很簡單,如下: 功能dummyGUI

f = figure('Name','Name1','Tag','Name1','Units','Pixels','Position',[50 50 1000 600]); 

    plotButton = uicontrol('Style', 'pushbutton',... 
         'Parent', f,... 
         'String', 'plot',... 
         'Units', 'pixels', 'Position', [100 400 100 20],... 
         'Callback',@plotButton_callback); 

    axes1 = axes('Parent', f,... 
        'Units', 'pixels', 'Position', [50 50 500 300]); 



    function plotButton_callback(hObject, eventdata, handles) 
     hfigure = getappdata(0,'hfigure'); 
     axes1 = getappdata(0,'axes1') 

     set(hfigure,'CurrentAxes',handles.axes1) 

    end 
end 

我在命令窗口中使用的代碼是:

x = 1:100; 
plot(x,x.^2); 
hfigure = gcf; 
hfigure = setappdata('0','hfigure') 

也有一些是明顯缺失的,但我沒有想法是什麼。

非常感謝提前。

羅馬諾

回答

0

我找到了一種方法來做到這一點,也許它不是正確的,但工作。另外做到這一點,我也發現爲什麼我沒有得到任何陰謀和任何錯誤消息。不知怎的,變量沒有正確傳遞,而且只是空的。 所以變量存在,但它不包含任何東西,因此沒有錯誤信息,也沒有情節。

我現在這樣做的方式是。

function plotButton_callback(hObject,eventdata,handles) 
    set(mainScreen,'CurrentAxes',plotFig); 
    [struct] = compare_cycle(var1,var2); 
end 

和compare_cycle.m

function [struct] = compare_cycle(var1,x) 
    struct = plot(xaxis,yaxis,...) 
end 

請不在乎所有的變量的名字,因爲這只是一個嘗試。

謝謝你的幫助Suever。

0

與您的代碼最直接的問題是,既然你不使用指南,只有提供給回調函數2個輸入:

  1. 由此引發的回調對象
  2. 未提供handles輸入回調事件數據

和因此,當您嘗試訪問它時,MATLAB會發出錯誤的輸入參數數量錯誤。

您應該明確地將必要的句柄自己傳遞給回調函數。

set(plotButton, 'Callback', @(src ,evnt)plotButton_callback(src, evnt, axes1)) 

function plotButtonCallback(hObject, eventdata, axes1) 
    hfigure = ancestor(hObject, 'figure'); 
    set(hfigure, 'CurrentAxes', axes1) 
end 

或者因爲plotButtonCallback是你的主功能的子功能,您可以訪問父功能

function plotButtonCallback(hObject, eventdata) 
    set(f, 'CurrentAxes', axes1) 
end 

其他問題的axes1f變量

當你調用setappdata,您正在傳遞字符串'0'比圖形根對象0。另外,您需要提供第三個輸入到setappdata以實際提供該值。

setappdata(0, 'hfigure', hfigure) 

在一般情況下,這是一個壞主意,保存在根(0)對象的應用程序數據的事情,因爲如果你有你的GUI運行的兩個實例,它們會互相干擾。

+0

感謝您的回答。我試過了,錯誤信息消失了。但是,如果點擊該按鈕,它仍不會將繪圖顯示在軸上。對於另一個問題,你建議做什麼? – Romano

+0

其他人有這樣的例子或答案?我真的需要知道如何。我已閱讀多個網站和有關此主題的論壇上的問題,但找不到明確的示例或答案。大多數的解釋對我來說都很不清楚,還是我? – Romano

+0

@Romano它在哪裏繪製它呢?你必須把你的繪圖代碼放在按鈕回調中。我沒有在回答中寫出這部分內容 – Suever