How to wait for an event without stopping the program?
24 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
William Afonso
el 21 de Oct. de 2015
Respondida: William Afonso
el 1 de Nov. de 2015
Hello world,
I am using a GUI which displays a list of names. When the user selects a name among this list, I want to call a function, ONLY if the name is selected more than x seconds. I don't want to use a while loop to wait the x seconds, because I don't want my program to cumulate while loops each time the user selects a name. Does anyone know how to solve this problem? Is it possible to create this kind of event/listeners in Matlab? If it is possible, how to do it? Thanks for your help
5 comentarios
Guillaume
el 22 de Oct. de 2015
Any user interface that does not behave the same as is standard for the platform is very likely to result in user frustration. Particularly, if there is no cue to the new behaviour.
The expected behaviour of a user interface is that clicking on something has an immediate effect. Not after you press on it for a number of seconds. You're making it harder to use your interface. You may find that instead of trying to adjust to your special interface, the user is simply not going to use it.
What is the rationale for forcing the user to click on the list item for a minimum amount of time? And how are you planning to emulate that for keyboard input?
Walter Roberson
el 22 de Oct. de 2015
I could imagine that if you are using up/down to move between list selections then you would not want the selection chosen as soon as you got there because you might want to move further on (or back). I can imagine someone thinking that a good approach would be to allow this kind of movement and to consider a location selected if the user "stopped moving" the keys for long enough. However, the built-in interface for such things depends not upon timing but upon the user pressing return / enter when the item to be selected is reached.
William, pushbuttons do not have a "release" callback: they only fire when the item is clicked on.
Respuesta aceptada
Robert
el 21 de Oct. de 2015
You could accomplish this with a timer object. When a name is selected, use the callback to create and start a timer with ExecutionMode set to SingleShot (try doc timer for details). Then after the StartDelay of the timer has elapsed, the timer's TimerFcn will execute.
If the user selects a new name before the time is up, have the selection callback stop the timer. If it is possible to deselect a name without triggering that callback, have the timer function check to be sure the original name is still selected before executing the rest of your code.
1 comentario
dpb
el 22 de Oct. de 2015
And the latter event described above would be one of those most surprising and puzzling occurrences w/ such an interface for the user--once had gotten used to the idea of having to hold a while--the hold wouldn't have satisfied on the deselected file but the second would be selected without there being the requisite time delay, hence possibly (probably?) getting the wrong one. In the extreme, if the timer were almost ready to time out when the deselection took place, it would be only an instant on the alternate and BOOM! -- gotcha'!
Just to illustrate to OP it's not a good idea of a user interface...
Más respuestas (1)
Ver también
Categorías
Más información sobre Interactive Control and Callbacks en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!