簡體   English   中英

從外部功能到軸的圖形化Matlab GUI

[英]Plot from external function to axes matlab GUI

我一直在嘗試從外部函數到GUI內部的軸進行繪圖。 沒有使用GUIDE。 我已經嘗試了多種方法,但是我不斷收到錯誤消息

Not enough input arguments.

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

現在,我已經制作了一個虛擬GUI,並且在命令窗口中進行了繪制,但是我無法擺脫錯誤。

我的代碼非常簡單,如下所示:function 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')

顯然缺少一些東西,但是我不知道該怎么辦。

提前謝謝了。

羅曼諾

代碼的直接問題是,由於您未使用GUIDE,因此僅提供兩個輸入給回調函數:

  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是主函數的子函數,因此您可以訪問父函數的axes1f變量

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

其他事宜

調用setappdata ,將傳遞字符串 '0'而不是圖形根對象0 另外,您需要向setappdata提供第三個輸入以實際提供值。

setappdata(0, 'hfigure', hfigure)

通常,將內容保存在root( 0 )對象的appdata中是一個壞主意,因為如果您有兩個GUI實例在運行,它們將相互干擾。

我找到了一種方法,也許它不是正確的方法,但是正在起作用。 另外,我還發現了為什么我沒有得到任何圖和任何錯誤消息。 不知何故,該變量未正確傳遞,只是空的。 因此變量存在,但不包含任何內容,因此沒有錯誤消息也沒有圖。

我現在的做法是。

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。

暫無
暫無

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

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