IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

QSlider et QToolTip en direct


Sujet :

PyQt Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut QSlider et QToolTip en direct
    Bonsoir,

    J'essaie d'améliorer un QSlider,

    je voudrais l'améliorer sur 2 points :
    1) Afficher du texte au niveau des petits tirets (ticks en anglais je crois).
    Je pense qu'en utilisant un QGridLayout ça doit pouvoir le faire.
    le QSlider prend une ligne entiere qui est découpée en X colonnes
    Les X labels qui se mettent sur la ligne en dessous (ou au dessus) dans les X colonnes.

    2) Je voudrais surtout, et là je vois pas trop comment, afficher une infobulle qui me donnerait une valeur par exemple dès que je bouge le curseur.
    Alors modifier l'infobulle, facile mais l'infobulle ne veut pas réapparaitre aussitot... j'ai essayé avec repaint mais ça n'a rien changé.

    Des idées ?

    Merci et bonne soirée.
    Sous Kubuntu 20.04

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    salut,

    J'ai fait un widget composite qui utilise un slider et l'infobulle est mise à jour lors d'un enterEvent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            ...
            self.slider = QtWidgets.QSlider(self)
            self.slider.enterEvent = self.enter_event
            ...
     
        def enter_event(self, event):
            self.setToolTip(str(self.slider.value()))
            QtWidgets.QSlider.enterEvent(self.slider, event)
    Le code complet:
    http://bazaar.launchpad.net/~vincent...ontalslider.py

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il suffit de sous-classer QSlider et de surcharger mouseMoveEvent comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Slider(QtWidgets.QSlider):
     
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.setMouseTracking(True)
     
        def mouseMoveEvent(self, event):
     
            QtWidgets.QToolTip.showText(event.globalPos(), "{}".format(self.value()))
     
            super().mouseMoveEvent(event)
    La doc de QWidget.mouseMoveEvent parle du sujet:

    If you want to show a tooltip immediately, while the mouse is moving (e.g., to get the mouse coordinates with QMouseEvent::pos() and show them as a tooltip), you must first enable mouse tracking as described above. Then, to ensure that the tooltip is updated immediately, you must call QToolTip::showText() instead of setToolTip() in your implementation of mouseMoveEvent().
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    tyrtamos => j'aime bien ta solusion mais ça fonctionne pas, ça m'empeche de déplacer le curseur avec la souris, impossible de le faire glisser, je peux le bouger qu'avec des clics.
    EDIT : c'est le mouseMoveEvent qui me bloque.


    VinsS => il faut que je me penche plus sur ton fichier car en testant à l'arrache il ne se passe rien.
    EDIT :
    En fait j'ai fait exactement comme toi :p
    mais ça ne répond pas à ce que je voudrais faire, en effet, le tooltip est mis à jour une fois qu'on est ressorti du widget et revenu dessus.
    je voudrais un tooltip qui suit le déplacement de la souris, se met à jour et reste affiché tant que je bouge.

    du coup je pense qu'il faut utiliser QToolTip.showText comme l'indique tyrtamos mais dans mes tests je n'ai pas réussis justement.

    Merci à vous
    Sous Kubuntu 20.04

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Citation Envoyé par hizoka Voir le message
    tyrtamos => j'aime bien ta solusion mais ça fonctionne pas, ça m'empeche de déplacer le curseur avec la souris, impossible de le faire glisser, je peux le bouger qu'avec des clics.
    Il faut retourner l'événement au système pour qu'il l'exécute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        def mouseMoveEvent(self, event):
            QtWidgets.QToolTip.showText(event.globalPos(), "{}".format(self.value()))
            QtWidgets.QSlider.mouseMoveEvent(self, event)
    En fait nos deux solutions on ceci de différent, celle de tyrtamos opère lors d'un glissement du curseur et la mienne lorsque le pointeur de souris entre n'importe où sur le slider.


    Edit pour ton edit: Et si tu inclus les deux solutions ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    VinsS => Merci !!
    j'avais tété différents renvoies d'infos mais j'étais pas parti du bon coté...

    Merci à vous deux, c'est éxactement ça !

    VinsS => tu as d'autres widgets composites comme ça ? car ça m'aurait fait gagner pas mal de temps vu qu'on a fait pratiquement pareil
    Sous Kubuntu 20.04

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Ma solution avait une dernière ligne qui était cachée par le cadre mais qui faisait bien partie du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super().mouseMoveEvent(event)
    Et effectivement, sans ce retour à l'ancêtre, le curseur ne bouge plus!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    en tout cas, vraiment merci à vous deux
    Sous Kubuntu 20.04

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Ma solution avait une dernière ligne qui était cachée par le cadre mais qui faisait bien partie du code:
    Ooops, m'y suis fait prendre !

    Citation Envoyé par hizoka Voir le message
    VinsS => tu as d'autres widgets composites comme ça ? car ça m'aurait fait gagner pas mal de temps vu qu'on a fait pratiquement pareil
    Regarde là

    http://bazaar.launchpad.net/~vincent...Widgets_PyQt5/

    Il y a de la doc, faut lancer index.html dans ton navigateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sdk Direct X 8.1
    Par ShinMei dans le forum DirectX
    Réponses: 1
    Dernier message: 23/02/2003, 18h39
  2. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 17h21
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 05h19
  4. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 17h34
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 19/07/2002, 00h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo