MATLAB Answers

How to display Command Window in App Designer in real time

95 views (last 30 days)
Jimmy Neutron
Jimmy Neutron on 29 Oct 2020
Answered: Rik on 5 Nov 2020
My main script contains the following simple code:
%% Initializing diary
dfile ='diary.txt';
if exist(dfile, 'file')
delete(dfile);
end
diary(dfile)
diary on
%% Main Code
disp("first")
pause(5)
disp("second")
pause(5)
disp("third")
diary off
I have a button that starts a function and inside this button I have:
% Button pushed function: StartScriptButton
function StartScriptButtonPushed(app, event)
run("Test.m");
temp = regexp(fileread('diary.txt'), '\r?\n', 'split');
app.OutputTxt.Value = temp;
end
The .m file has a diary log that starts at the start of the matlab script and eds at the end. The problem is that the values are only printed after the whole script has executed... I want them to be displayed as soon as they are done. How could this be accomplished? Am I supposed to turn off the diary and turn it on afer every time I have a print in the .m script? Ii haven't found a solution that works for me online, so sorry if the question sounds like it has been already asked.

  8 Comments

Show 5 older comments
Jimmy Neutron
Jimmy Neutron on 5 Nov 2020
yes, unfortunately this is exactly what it looks like... Why is that incorrect?
Rik
Rik on 5 Nov 2020
Where are you telling Matlab to do anything with app? How should Matlab know what you want to happen? Did you edit the disp function?
See my comment under the answer by Mario.
Jimmy Neutron
Jimmy Neutron on 5 Nov 2020
Dear Rik, your comment under Mario's worked splendidly! Thank you very much. If you could, please edit your answer so I could mark it as the right answer :)

Sign in to comment.

Accepted Answer

Rik
Rik on 5 Nov 2020
Slightly expanding on the answer by Mario Malic:
You need to retrieve the handle to your application, e.g. like this:
app = get(findall(0, 'Tag', 'AppUIFigure'), 'RunningAppInstance');
Then inside your script you can set the Value property of your text box, like the code below.
disp("first"),app.OutputTxt.Value="first";
pause(5)
disp("second"),app.OutputTxt.Value="second";
pause(5)
disp("third"),app.OutputTxt.Value="third";

  0 Comments

Sign in to comment.

More Answers (2)

Mario Malic
Mario Malic on 29 Oct 2020
Set a tag, or a unique name for your app in Component Browser, under UIFigure - Identifiers, and get its handle this way:
%% in your script
app = get(findall(0, 'Tag', 'AppUIFigure'), 'RunningAppInstance');
To remove diary from previous run, otherwise it appends to it
Diary_File = 'diary.txt'
if isfile (Diary_File)
delete(Diary_File)
end
diary (Diary_File)
Updating the text
Cmd_Window_Text = fileread(Diary_File);
app.OutputTxt.Value= Cmd_Window_String;

  5 Comments

Show 2 older comments
Mario Malic
Mario Malic on 4 Nov 2020
You have the instructions already in my comment above. You need to include this line, remember to set the tag of your application.
%% in your script
app = get(findall(0, 'Tag', 'AppUIFigure'), 'RunningAppInstance');
Rik
Rik on 4 Nov 2020
app = get(findall(0, 'Tag', 'AppUIFigure'), 'RunningAppInstance');
%% Main Code
disp("first"),app.OutputTxt.Value="first";
pause(5)
disp("second"),app.OutputTxt.Value="second";
pause(5)
disp("third"),app.OutputTxt.Value="third";

Sign in to comment.


Walter Roberson
Walter Roberson on 4 Nov 2020
"The problem is that the values are only printed after the whole script has executed... I want them to be displayed as soon as they are done. How could this be accomplished?"
A few years ago Mathworks modified diary to flush to file as each line is generated. If you are using Mac or Linux then you can read from the diary file as it is being generated.
If you are using Windows then you have the hassle that Windows might well have locked the file. Perhaps Mathworks deliberately made it shareable when it is open; I do not know.

  1 Comment

Mario Malic
Mario Malic on 4 Nov 2020
If you are using Mac or Linux then you can read from the diary file as it is being generated.
Confirming above for Windows as well.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!