필터 지우기
필터 지우기

changing values of an edit box on gui while timer is printing on a figure

조회 수: 1 (최근 30일)
Hello,
I am running a timer, where it takes real data and plots them every 0.1 seconds. I am plotting the data on a normal figure(not embedded in gui). I also created a gui so that i can change some values in real time. However, whenever I click on edit box to change some values, I have only 0.1 sec to write something in the edit box (which is not enough...) before the plot callback command runs. Once the plot callback commands starts I have to click with my mouse again in the edit box to be able to write in it..
Is there a way, to make the gui the main window so that i can write in edit boxes while updating the figure in real time?
Thanks.. M

채택된 답변

Sean de Wolski
Sean de Wolski 2012년 11월 6일
편집: Sean de Wolski 2012년 11월 6일
How are you plotting it? If you update the Data of an existing HG object, focus will not be requested. Consider this example:
figure;axes;
hPlot = plot(1:10);
T = timer('Period',0.25,'TimerFcn',@(~,~)set(hPlot,'YData',rand(1,10)),...
'TasksToExecute',200,'ExecutionMode','FixedRate'); %Note updatign existing line!
start(T);
figure;
uicontrol('style','edit','String','Type in me!');

추가 답변 (2개)

N/A
N/A 2012년 11월 6일
hey Sean, Thanks, I was calling in my callback
1- hplot = figure(1);
2- axes;
3- set(hPlot,'YData',rand(1,10))
i removed line 1 and 2
and added
refreshdata
as well in the end, and all works fine!!! thanks!

N/A
N/A 2012년 11월 7일
편집: N/A 2012년 11월 7일
Hi, I stuck on a similar issue, and I am trying below to be descriptive and I would really appreciate your help..
Problem description : If I have a function plothings() within my callback function, which runs every 10 iterations (for example)
%
% this is in callback function
...
time =time+1
if mod(time,10)==0
plotthings()
end
...
%
then the function plots the figure every time it enters the if loop as expected. Now if I also want to plot things (using plotOtherthings() ), but this time whenever I click a button at a gui, then I am not able to make the figure show as soon as I press the button, but it updates only when the plotthings() in callback is excecuted. The only way i manage to sort this out.. is to do the following
% this is a callback function in Mygui.m where the gui keeps its functions
function plotOtherthings_Callback(hObject, eventdata, handles)
updateMonitors();
refreshdata
where
% helper function for updating monitors
function updateMonitors()
global monitors
1)%h = figure(monitors.h); % I generated and saved this as monitors.h = figure(1)
2)% OR axes(monitors.ax); works as well
p1 = monitors.p1; % I generated and saved this as monitors.p1 = plot(...)
set(p1,'XDataSource','x1'); % x1 is a variable in workspace
refreshdata
My issue is that to make it appear whenever I click the button i have to use line 1) or 2) to make figure as my current figure...which I do not want to do as I need the main window to be the gui..(as that was my initial issue in original post..)
  댓글 수: 1
N/A
N/A 2012년 11월 7일
Ok,.. for some reason , 'XDatasource' should be replaced with 'XData'. Even though I would have liked to understand the difference...

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Graphics Objects에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by