PyQt4 événement MouseMove sans MousePress
J'ai besoin d'attraper lorsqu'un Utilisateur déplace la souris sur l'interface graphique, mais pas quand ils sont en maintenant le bouton de la souris (ce qui permettrait de faire quelque chose de différent).
Je ne trouve pas de conveniant méthode pour ce faire,
sauf périodiquement trouver la position de la souris et de le vérifier à la position précédente...
Ce qui serait horrible.
La mouseMoveEvent n'est appelée que lorsque la souris est déplacée, tandis que le bouton gauche de la souris est enfoncé,
sauf si bien sûr le widget a 'suivi de la souris'. Le suivi de la souris n'est pas une option pour moi, parce que l'interface graphique doit se comporter différemment lorsque l'on déplace la souris et le bouton gauche de la souris est enfoncé.
Y a intégré les méthodes pour ce faire?
(ou de n'importe quel des idées astucieuses?)
par exemple:
Est-il un moyen de vérifier si le bouton gauche de la souris est enfoncé à tout moment?
Ou un "survol" de l'événement qui peut être appliquée à un QRect (coordonnées)?
Muchas gracias.
Windows 7 (32)
python 2.7
PyQt4
OriginalL'auteur Anti Earth | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple pour ce faire est d'installer un filtre d'événement sur qApp:
OriginalL'auteur ekhumoro
Il semble que vous avez mal compris ce que
mouseTracking
. Il ne provoquemouseMoveEvent
à être licenciés, rien d'autre. En d'autres termes, c'est exactement ce dont vous avez besoin.Vérifier l'événement les boutons() pour voir si un bouton a été pressé:
QMainWindow ne pas avoir le "setMouseTracking" la fonction. J'ai essayé ta procédure suggérée à l'aide d'un Groupe de la zone de widget, mais sans succès.
Il n'ont
setMouseTracking
. Elle est héritée deQWidget
. Regardez sousQWidget
.Pourquoi ça ne marche pas pour moi?!?!?! D: j'ai eu recours à QTimer et le multithreading.
Qu'advient-il si vous essayez cette fonction avec les QMainWindow ?
OriginalL'auteur Petr Viktorin
appel setMouseTracking(True) d'abord la méthode. Puis mouseMoveEvent sera tiré sans aucune touche pressée.
OriginalL'auteur HYRY
Que les gens ont dit, l'approche correcte semble être d'appeler setMouseTracking(True) sur le widget. Ce que j'aimerais ajouter, c'est que, ayant fait cela, vous pouvez faire la distinction entre les mouvements de souris et une souris comme suit:
NoButton
événement, mais ne les travaux pour laLeftButton
etRightButton
événements. Pour moi c'est très bien, je veux tester les fonctions de la souris, y compris les clics - le 'glisser' exerce à la fois.OriginalL'auteur MarcTheSpark