|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 36 ![]() |
Bonjour,
Je cherche un moyen de detecter si l'ui est active ou non (self.hasFocus()) au cours de l'execution. Je cherche à executer une function quand l'utilisateur clique sur une autre fenetre (l'ui devient donc inactive) et quand l'utilisateur revient sur l'ui. Une idée ? Merci |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 797 ![]() |
Bonjour,
Dans une application multifenêtre, on peut savoir si l'une des fenêtres est active avec: Code :
Mais dans le cas contraire, on peut, dans la fenêtre à tester, mettre à jour une variable en surchargeant la méthode "eventFilter" et en testant si le focus est 'in' ou 'out'. Si tu es intéressé, je peux proposer du code.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
||
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Inscription : août 2008 Messages : 36 ![]() |
Merci,
voici mon code, tout simple juste pour tester ce cas là : Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 972 ![]() |
Salut,
Les widgets ont des méthodes focusInEvent() et focusOutEvent(). Il faut fixer les règles de focus avec setFocusPolicy() Reprenant ton exemple: Code :
Edit: rajouté la raison de l'event. http://www.riverbankcomputing.co.uk/...cusPolicy-enum |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 797 ![]() |
Bonjour,
Il faut clarifier le problème à résoudre! Dans une fenêtre qui possède plusieurs widgets susceptibles de recevoir le focus, il y a une différence entre une fenêtre "active" (comme quand on clique sur son bandeau) et une fenêtre qui a le focus. Dans ce dernier cas, quand la fenêtre devient active, l'un des widgets "attrape" le focus, et les méthodes focusInEvent et focusOutEvent de la fenêtre ne sont jamais exécutées. Ou il faudrait sous-classer tous les widgets intérieurs et établir un lien entre toutes ces mêmes méthodes. En surchargeant la méthode eventFilter de la fenêtre, c'est plus simple parce qu'on peut tester dedans tous les widgets pour savoir qui a le focus "in" ou "out" sans avoir à sous-classer ces widgets. En fait, avec le code fourni par kiby56, je ne comprends pas à quel moment ni pourquoi il souhaite poser la question. Si c'est en cliquant sur le bouton, on connait déjà la réponse: la fenêtre sera forcément active! @kiby56: donne plus d'explications stp!
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 972 ![]() |
Ben, moi j'ai compris que c'était sur la fenêtre que le focus l'intéressait.
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 797 ![]() |
@VinsS
Oui, mais avec ton exemple, quand on rend la fenêtre active (alors qu'elle ne l'était pas) en cliquant directement sur son bouton, la méthode focusInEvent n'est pas exécutée. De même, quand on rend la fenêtre inactive en cliquant sur une autre fenêtre alors que c'était le bouton qui avait le focus, la méthode focusOutEvent n'est pas exécutée. C'est ça le problème! Tout dépend donc de ce que le posteur initial recherche.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
|
|
00
|
|
|
#8 | ||
|
Invité régulier
![]() Inscription : août 2008 Messages : 36 ![]() |
Bonjour,
En fait, j'ai trouver une solution (est-elle bonne, je débute en python ?), en mettant un timer, qui check alors si la fenêtre est active ou non. J'ai mis une fonction facile à voir dans ce cas : Code :
|
||
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 36 ![]() |
VinsS, solution intéressante, je la garde dans un coin. Par contre en effet, si le bouton a le focus, le widget ne l'a plus, donc çà ne va pas dans ce cas précis. Mais çà va me servir pour autre chose
|
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Fred Enseignant Inscription : juillet 2006 Messages : 1 329 ![]() |
Pour vérifier le focus, on utilise la méthode hasFocus, un truc du genre
Code :
__________________
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein) |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com