App Designer - Pointer update issue

26 visualizzazioni (ultimi 30 giorni)
Gwendal Marrec
Gwendal Marrec il 5 Mag 2022
Risposto: Veronica Taurino il 30 Mag 2023
Hello,
I am working on an App Designer app.
I have coded the function below. It is supposed to change the pointer to watch if it is an arrow or to arrow if it is a watch.
methods (Access = public)
function pointer_change(app)
if app.UIFigure.Pointer == 'arrow'
set(app.UIFigure, 'pointer', 'watch');
else
set(app.UIFigure, 'pointer', 'arrow');
end
drawnow()
end
end
All my callbacks look like this :
function callback1(app, event)
pointer_change(app);
%some code that takes a long time to run so I need to change the cursor
%to indicate that matlab is busy running
pointer_change(app);
end
When I change the pointer from 'watch' to 'arrow' (which corresponds to the second call of pointer_change), the pointer is not updated until I move the mouse, as if the drawnow statement was not executed. As soon as I move the mouse, the pointer becomes an arrow.
Does anyone know why ?
Many thanks,
Gwendal
  6 Commenti
Gwendal Marrec
Gwendal Marrec il 10 Ago 2022
Here is a callback function where i call pointer_chang(app) before and after the calculations.
function N_Parcourir1Pushed(app, event)
pointer_change(app);
[filename1,path1] = uigetfile({'*.lim'},'Choose file',app.curpath);
if filename1~=0
app.curpath = path1;
app.N_FieldFichierOriginal.Value = filename1;
app.N_original_file = [path1,filename1];
[app.N_freq1,app.N_gain1] = normalisation(app.UIFigure,[path1,filename1]);
end
pointer_change(app);
end
This is what pointer_change(app) looks like :
function pointer_change(app)
if strcmp(app.UIFigure.Pointer,'arrow')
set(app.UIFigure, 'pointer','watch');
'a'
else
set(app.UIFigure, 'pointer','arrow');
'z'
end
end
When I run my app, I get a 'a' and a 'z' in my command window. The pointer effectively changes from 'arrow' to 'watch' during the first call of the function, but then it does not return to 'arrow' during the second call of the function (until I move the cursor), despite printing the 'z'.
Geoff Hayes
Geoff Hayes il 15 Ago 2022
@Gwendal Marrec - could you attach a simplified version of your GUI that exhibits this behaviour?

Accedi per commentare.

Risposte (4)

ryugasen
ryugasen il 25 Ago 2022
I was having the same issue with only one situation, and upon looking on your example, I think I found the culprit. It's related to opening a file (I have a pointer change at two different callback functions, it works perfectly in one where it does a calculation, while in the one that loads an excel file through readmatrix it doesn't work until I move the cursor).
Interestingly, I found that if the app is maximised, it works perfectly regardless. I suspect it has something to do with the window of the app becoming out of focus when you go and load a file (and only upon the moving the mouse does Windows realise the app is still the window of focus). If the app is maximising, I guess Windows always treats it as the focus.
So yeah, the solution is to keep the app maximised, or if someone with more tech knowledge knows how to keep the app in focus even while Windows browses and opens a different file in the background, then that would be the best solution

Veronica Taurino
Veronica Taurino il 10 Mag 2022
I have the same problem. The pointer does not change until I move the cursor. I am working in the app designer, each callback has something like:
function callback1(app, event)
set(app.UIFigure, 'Pointer','watch')
% do stuff...
set(app.UIFigure, 'Pointer','arrow')
end
  5 Commenti
Gwendal Marrec
Gwendal Marrec il 11 Mag 2022
Modificato: Gwendal Marrec il 11 Mag 2022
Your sample code works well for me. Really intriguing.
I'm on Windows 10 20H2.
Veronica Taurino
Veronica Taurino il 30 Mag 2023
Modificato: Veronica Taurino il 30 Mag 2023
after a year, I still have the same issue.
I solved it programatically moving a bit the cursor at the end of the process:
hroot=groot;
pp=get(hroot,'PointerLocation'); % current cursor position
set(hroot,'PointerLocation',[pp(1)+10 ,pp(2)+10 ]); %slightly moving cursor

Accedi per commentare.


Gwendal Marrec
Gwendal Marrec il 13 Giu 2022
Up. I've tried a couple of things but none of them worked out. Whenever I call another function to handle the pointer change, it never returns to 'arrow' until I move the mouse.

Veronica Taurino
Veronica Taurino il 30 Mag 2023
after a year, I still have the same issue.
I solved it programatically, moving a bit the cursor at the end of the process:
hroot=groot;
pp=get(hroot,'PointerLocation'); % current cursor position
set(hroot,'PointerLocation',[pp(1)+10 ,pp(2)+10]); %slightly moving cursor

Categorie

Scopri di più su Historical Contests in Help Center e File Exchange

Prodotti


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by