コールバック関数と "drawnow"とともに使用されるswitch-caseステートメントのwhileループに問題があります。私のコードでは、switch-caseのケースはuicontrolのpushbuttonsによって決まりますが、case文には、 'windowbuttondown/up/motionfcn's'を使ってマウスの動きを追跡するコールバック関数が追加されています。しかし、case文のwhileループ内に複数のプロットを描画するので、プログラムを実行すると次のエラーが表示されます。using drawnow:uicontrolコールバックを評価中の割り込み
エラー1608 ==> drawnow ??? 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
ヘルプの終わり
こんにちは、ありがとうコメントのためにたくさん!残念ながら、pause(0.01)も非常に同じエラーを返します。私はwhileループを取り除く方法を見つけようとしてきましたが、それから私は正確にはわかりません。上記のコードでは、GUIユーザは、停止ボタンを押すまで対話的にプロット上の線を曲げることができます。大文字と小文字のオプションは、プロット上の異なる領域を選択します。私は2つのネストされたswitch-case引数(リージョン選択のためのもの、マウストラックのためのもう1つ)が効率的かつ適用可能であるとは思わない。さらなるアドバイスをお願いしますか?私はdrawnowを使用して各反復でFigureを更新する必要があります。 – user1365673
実際にあなたは引っ越しを必要としません。 Matlabは時間を見つけたら再描画します。 drawnowは、すべての背景のものを中断し、 "今すぐに描画する"ように指示します。残念ながら、あなたのコールバック関数はバックグラウンドの一つです。あなたの問題は、whileループが描画をブロックし、drawnowがループを壊すことです。あなたはあなたのプログラムを異なるものにする必要があります。 – bdecaf