0

switch-case ステートメント内の while ループに問題があり、コールバック関数および「 drawow 」と一緒に使用されます。私のコードでは、switch-case のケースは uicontrol のプッシュボタンによって決定されますが、case ステートメントには、「windowbuttondown/up/motionfcn」を使用してマウスの動きを追跡するための追加のコールバック関数が含まれます。ただし、case ステートメントの while ループ内で複数のプロットを描画するため、'drawnow' を使用すると、プログラムを実行すると次のエラーが発生します。

160 行目のエラー ==> drawow ??? uicontrol コールバックの評価中に中断する

case ステートメント内のコードは、独立して実行してもエラーは発生しませんが、残りのコードと統合すると何らかの問題が発生します。これを以下に添付します。どんな助けでも大歓迎です。どうもありがとう!

function programme(selection)

if nargin == 0 
selection=0
end

switch selection
case 0 %start GUI and uicontrols to set up the cases i.e programme(1), programme(2) etc         
    uicontrol('style','pushbutton',...
        'string','First', ...
        'position',[50 700 50 20], ...
        'callback','programme(1);');
    uicontrol('style','pushbutton',...
        'string','Second', ...
        'position',[150 700 50 20], ...
        'callback','programme(2);');

case 1

    %mouse track:
    set(gcf,'windowbuttondownfcn','mousedown=1;');
    set(gcf,'windowbuttonupfcn','mouseup=1;');
    set(gcf,'windowbuttonmotionfcn','mousemotion=1;');

    %to terminate the while loop, set up stopit=1 on one of uicontrol buttons:   
    uicontrol('style','pushbutton',...
        'string','First', ...
        'position',[50 700 50 20], ...
        'callback','stopit=1;');

    stopit=0;

    while (stopit==0)
        if mousedown==1
            statements   
            if mouseup ==1
                statements (plots)
                mouseup=0;
                mousedown=0;
                mousedown=0;
            end
        end
        drawnow
    end

case 2
    statements
otherwise
    statements

終わり

4

1 に答える 1

1

ヘルプを参照してください: drawow コールバックを中断します。そして、コールバックで関数を呼び出します。に置き換えることができるかもしれませんpause(0.01)

ただし、ループを取り除き、代わりにコールバックを使用することを強くお勧めします。

于 2012-05-08T14:18:18.927 に答える