我正在嘗試使用右/左箭頭鍵來增加/減少變數的值。然后在下一個回圈中使用變數的新值。要打破回圈,可以使用回傳鍵。
為了實作這一點,我嘗試構建一個函式,其中包含- 回圈KeyPressFcn和while附加if- 陳述句。
hkey = figure(1);
set(hkey,'KeyPressFcn',@UserFeedback);
function UserFeedback(~,evnt)
user_done = 0; % set confirmationstatus to 0 user has not yet chosen level
intensitylevel = 1; % set start intensity = 1
while user_done == 0 % as long as user has not decided user can make changes
waitforbuttonpress; % wait for keyboard input
if strcmpi(evnt.Key,'leftarrow') % user presses left arrow key
intensitylevel = intensitylevel-1;
disp(intensitylevel)
elseif strcmpi(evnt.Key,'rightarrow') % user presses right arrow key
intensitylevel = intensitylevel 1;
disp(intensitylevel)
elseif strcmpi(evnt.Key,'return') % user presses enter key
intensitylevel = intensitylevel;
user_done = 1; % set condition to end the while loop
disp(intensitylevel)
break % end if loop
end
end
end
uj5u.com熱心網友回復:
好吧,我想這些評論幾乎可以回答您的問題,但僅僅因為我在這里花了一些時間就是一個完整的例子。真正的底線是擺脫while回圈并定義intensitylevel全域或作為可從UserFeedback函式內部訪問的引數。
update_color;
function update_color()
hkey = figure;
return_pressed = false;
intensitylevel = 1;
set(hkey,'KeyPressFcn',@(src, evnt) UserFeedback2(src, evnt));
waitfor(hkey);
function UserFeedback2(~,evnt)
if return_pressed
disp('Already done here. Changes not allowed!')
return;
end
if strcmpi(evnt.Key,'leftarrow') % user presses left arrow key
intensitylevel = intensitylevel - 1;
disp(num2str(intensitylevel))
pause;
elseif strcmpi(evnt.Key,'rightarrow') % user presses right arrow key
intensitylevel = intensitylevel 1;
disp(num2str(intensitylevel))
pause;
elseif strcmpi(evnt.Key,'return') % user presses enter key
return_pressed = true;
disp(num2str(intensitylevel))
end
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534018.html
標籤:软件
