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 :

Personnalisation d'un QSlider


Sujet :

PyQt Python

  1. #1
    Invité
    Invité(e)
    Par défaut Personnalisation d'un QSlider
    Bonjour,
    Je cherche à me paramétrer un slider avec un lcd lié à lui.
    J'arrive à faire à peu près ce que je veux mais j'ai deux petits détails qui m'embêtent... et je ne trouve pas les appels de fonctions qui m'intéressent.
    exemple ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #import pdb
    from PyQt5 import QtCore
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    import sys
     
     
    class fenPrincipale(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
     
            fenetre_widget = QWidget()
     
            #Ecrans LCD
            self.ecranlcd = QLCDNumber()
            self.ecranlcd.setStyleSheet("QLCDNumber{background: transparent}")
            self.ecranlcd.setFixedHeight(65)
            self.ecranlcd.setFixedWidth(80)
     
            #Sliders
            self.slider = QSlider(QtCore.Qt.Horizontal)
            self.slider.setStyleSheet("QSlider{background: transparent}")
            self.slider.setMinimum(10)
            self.slider.setMaximum(50)
            self.slider.setValue(10)
            self.slider.setTickPosition(QSlider.TicksBelow)
            self.slider.setTickInterval(10)
            self.slider.setFixedWidth(480)
     
            self.slider.valueChanged.connect(self.ecranlcd.display)
     
            #Layout
            layoutvertical = QVBoxLayout()
            layoutverticalglobal = QVBoxLayout()
            layoutvertical.addWidget(self.ecranlcd)
            layoutvertical.addWidget(self.slider)
            #Intégration    
            fenetre_widget.setLayout(layoutvertical)        
            self.setCentralWidget(fenetre_widget)
     
     
     
    def main(args):
        appli=QApplication(args)
        fenetre=fenPrincipale()
        fenetre.show()    
        r=appli.exec_()
        return r
     
    if __name__=="__main__":
        main(sys.argv)
    donc c'est une fenetre toute simple qui affiche dans le lcd la valeur du pointeur du slider.

    1ère question: Pourquoi est-ce que mon pointeur peut se mettre dans mes intervalles de 10 unités et indiquer à mon lcd des valeurs par pas de 1 (alors que je pensais lui donner des pas de 10 via "self.slider.setTickInterval(10)").
    j'aimerais que les seules positions possibles par le pointeur soient celles des indicateurs (tickinterval)

    2ième question:est-il possible d'indiquer des valeurs d'intervalles non linéaires? genre au lieu d'avoir un slider 0-5-10-15 avoir quelque chose du genre 1-2,5-3-5,6-8?

    3ième question: la couleur de mon pointeur, c'est quoi sa référence (pour la changer)? j'arrive à modifier le fond du slider mais pas le pointeur qui se balade sur le slider.


    Merci à vous!

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Utilise self.slider.setSingleStep(10) pour les sauts du curseur.

    Non on ne peut pas faire "quelque chose du genre 1-2,5-3-5,6-8

    Pour les couleurs, essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SLIDER = """QSlider::groove:horizontal {border: 2px solid #A0A5B2;
                    border-radius: 2px;
                    height: 4px;
                    background: #E8E8E8;}
                QSlider::handle:horizontal {background: qlineargradient(
                    x1: 0, y1: 0, x2: 0, y2: 1,
                    stop: 0 #FFFFFF, stop: 0.7 #3975D7,
                    stop: 1.0 #C0C0FF);
                    width: 20px;
                    border-top: 1px solid #FFFFFF;
                    border-left: 1px solid #0000FF;
                    border-right: 1px solid #0000FF;
                    border-bottom: 2px solid #0000CC;
                    border-radius: 2px;
                    margin: -3px 0;}"""
     
     
    ...
            self.slider.setFixedWidth(480)
            self.slider.setStyleSheet(SLIDER)
    Tu devrais comprendre facilement comment changer les couleurs.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Et bien je viens d'essayer le self.slider.setSingleStep(10)
    Mais ça ne change rien... mon curseur continue de parcourir son chemin par pas de 1.

    j'ai essayé de ne pas passer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.slider.valueChanged.connect(self.ecranlcd.display)
    en faisant une fonction où je vérifie la valeur de mon slider mais il ne considère pas mes paramètres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     self.slider.valueChanged.connect(self.ecran_lcd)
    def ecran_lcd(self):
        print(self.slider.value())
    Dernière modification par Invité ; 16/03/2017 à 17h38.

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Pas sur de comprendre, si tu glisses toi-même le curseur, oui tu peux définir n'importe quelle valeur.
    C'est comme ça que c'est conçu.

    Si tu cliques au-delà ou avant le curseur il se déplacera d'un step.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah oui, désolé j'ai pas précisé ce point.
    En fait j'aurais aimé figer les positions possibles du slider un peu comme le fait un combobox.
    c'est le genre d'objet que j'ai déjà croisé (et que je trouvais visuellement pratique) mais pas en python.

    Et oui, je viens d'essayer de cliquer à coté du curseur et le setsinglestep(x) marche bien!

Discussions similaires

  1. [MFC] Comment personnaliser sa police de caractères ?
    Par Guybrush113 dans le forum MFC
    Réponses: 11
    Dernier message: 26/05/2004, 07h29
  2. [langage] personnaliser le tri
    Par schnecke dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2004, 15h14
  3. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13
  4. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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