Automatically update a string in GUIDE textbox

I would like to be able to press a button and have the text field of a static textbox automatically update as a variable changes within a function.
I have some timer function:
function stopwatch
global t
for i = 1:10
clc;
t = tic
pause(1)
end
and the GUI callback function for the pushbutton:
function pushbutton1_Callback(hObject, eventdata, handles)
stopwatch
global t
set(handles.text2,'string',t)
but the textbox only updates once the loop is finished. How do I make it so that the textbox is updated automatically continuously?
Thanks!

回答 (2 件)

Stephen23
Stephen23 2017 年 7 月 21 日
編集済み: Stephen23 2017 年 7 月 21 日

0 投票

You will need to set the text string inside the loop. For example (untested):
function stopwatch(h)
for k = 1:10
pause(1);
set(h,'string',tic)
end
end
function pushbutton1_Callback(hObject, eventdata, handles)
stopwatch(handles.text2)
or even all in one function:
function pushbutton1_Callback(~, ~, handles)
for k = 1:10
pause(1);
set(handles.text2,'string',tic)
end
end

1 件のコメント

Jeffrey Alido
Jeffrey Alido 2017 年 7 月 21 日
Is there a way to do it while keeping the stopwatch function in a separate .m file?

サインインしてコメントする。

Image Analyst
Image Analyst 2017 年 7 月 21 日

0 投票

Have stopwatch take handles as an input and set it in there and call drawnow:
global t
for i = 1:10
clc;
t = tic
handles.text2.String = sprintf('Starting Time = ', t);
drawnow;
pause(1)
end
Not sure that makes sense to use tic though. You're starting 10 timers but saving only the starting time of the very last timer. Why????

8 件のコメント

Jeffrey Alido
Jeffrey Alido 2017 年 7 月 25 日
drawnow doesn't seem to be working. any other solutions?
Image Analyst
Image Analyst 2017 年 7 月 25 日
Are you sure handles.text2 is a valid control on your GUI, and that handles has a good value for it? Set a breakpoint on the tic line, and type
>> handles.text2
on the command line and see what it reports.
Also, run the attached demo.
Jeffrey Alido
Jeffrey Alido 2017 年 7 月 28 日
Do you know how to make it so that I can update the string from a separate .m file from the GUI?
Image Analyst
Image Analyst 2017 年 7 月 28 日
That's a lot trickier since the other GUI doesn't have the handle. I'd recommend you make just one comprehensive GUI than a bunch of floating, separate, overlapping GUIs that will clutter up your desktop. If you insist, see near the end of this FAQ entry: http://matlab.wikia.com/wiki/FAQ#How_can_I_share_data_between_callback_functions_in_my_GUI.28s.29.3F. I don't like that approach so I haven't done it, so I can't help you if you want to go down that path.
Walter Roberson
Walter Roberson 2017 年 7 月 28 日
Jeffrey did not ask about a separate GUI, only a separate .m file. As long as the function being called has access to some object that is within the main GUI, then guidata() can retrieve the handles structure, and then whatever fields desired can be accessed.
Image Analyst
Image Analyst 2017 年 7 月 28 日
Oh, okay. It's easiest if the second m-file is a function and then you can just pass handles of your first GUI into your second m-file function. So if your first GUI can start running your second function, then you can do (in your fist program)
% Call the function "secondMFile" passing it "handles" from your first GUI m-file
secondMFile(handles);
If your second m-file was started by you or some other program, then you'll have to use things like assignin() and evalin() I believe. Again, I never do that.
Jeffrey Alido
Jeffrey Alido 2017 年 7 月 28 日
I'm still a beginner so I am unsure what the code would all look like. Could you help from here?
So far I have my timer.m function:
function timer
for i = 1:15
clc;
i
pause(1)
end
And I'd like to press a pushbutton in the GUI so that a static textbox displays the timer live.
Thanks!
Image Analyst
Image Analyst 2017 年 7 月 28 日
I'd rather not give code for an approach that I don't recommend.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeScripts についてさらに検索

質問済み:

2017 年 7 月 21 日

コメント済み:

2017 年 7 月 28 日

Community Treasure Hunt

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

Start Hunting!

Translated by