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 :

Redimensionnement et proportions [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut Redimensionnement et proportions
    Bonjour,

    Je souhaiterai conserver les proportions d'un widget lors de son redimensionnement et faire en sorte qu'il reste centré dans l'espace de son widget parent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QMainWindow
    |-> QDockWidget
        |-> QFrame
            |-> QFrame
                |-> QWidget
    Dans la hiérarchie ci-dessus c'est le QWidget que je souhaiterais centrer dans la QFrame.
    Auriez-vous une idée ?

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tout ça se fait simplement avec des layouts et des spacers.


    Layout horizontal------------------------
    |<--QSpacer-->widget<--QSpacer-->|
    -------------------------------------------


    Mais je te conseille quand même d'utiliser le Designer pour tout cela, tu pourra directement visualiser le résultat.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Initialement j'étais parti sur une grille du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      0 1 2
    0 - - -
    1 - W -
    2 - - -
    Avec les lignes et colonnes 0 et 2 extensibles, le coefficient du Widget devant être nettement plus élévé que celui des lignes et colonnes extensibles.
    Du coup, effectivement mon Widget est centré, par contre rien ne garantit ses proportions ...

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà un petit exemple qui permet de montrer un widget (un QPushButton) au centre d'un container (le QWidget de la fenêtre) et qui suit le redimensionnement de la fenêtre en conservant ses proportions.

    Le principe, comme l'a évoqué VinsS, est de créer 2 spacers horizontaux et 2 spacers verticaux, et de positionner les 5 éléments (les 4 spacers et le bouton) grâce à un QGridLayout 3x3.

    Comme c'est ici un bouton, il faut aussi lui permettre l'ajustement de ses proportions avec le redimensionnement de la fenêtre, grâce à un QSizePolicy.

    Le principe devrait être adaptable à d'autres widgets et à d'autres containers.

    Mais c'est vrai que c'est plus facile à faire avec QtDesigner!

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # Python 2.7
     
    import sys
     
    from PyQt4 import QtCore, QtGui
     
    class Fenetre(QtGui.QWidget):
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
            self.resize(400, 300)
     
            # création du bouton avec faculté d'expansion respectant la proportion
            self.bouton = QtGui.QPushButton(self)
            sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
            sizePolicy.setHeightForWidth(True)
            self.bouton.setSizePolicy(sizePolicy)
     
            # spacer horizontaux
            spacerItem1 = QtGui.QSpacerItem(50, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            spacerItem2 = QtGui.QSpacerItem(50, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            # spacer verticaux
            spacerItem3 = QtGui.QSpacerItem(20, 50, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
            spacerItem4 = QtGui.QSpacerItem(20, 50, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
     
            # positionnement de tous les éléments dans le self (=le QWidget)
            posit = QtGui.QGridLayout()
            posit.addItem(spacerItem1, 1, 0)
            posit.addItem(spacerItem2, 1, 2)
            posit.addItem(spacerItem3, 0, 1)
            posit.addItem(spacerItem4, 2, 1)
            posit.addWidget(self.bouton, 1, 1)
            self.setLayout(posit)
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 17
    Par défaut
    Bonjour,

    J'ai essayé ton exemple. Effectivement c'est bien centré, par contre les proportions ne sont pas conservées

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Les proportions de quoi par rapport à quoi ?

    Supposant que tu ne crées pas une fenêtre contenant juste un simple bouton.

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

Discussions similaires

  1. Redimensionner une image - proportions et tailles maximales à respecter
    Par cp-08jhu dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 17/09/2014, 19h41
  2. Redimensionnement d'images aux mêmes proportions
    Par Turvy dans le forum Android
    Réponses: 2
    Dernier message: 05/05/2014, 12h26
  3. JSplitPane : redimensionnement et proportions entre les panel
    Par thierry_b dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 20/07/2009, 11h12
  4. Redimensionnement d'images conservant les proportions
    Par progfou dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 02/10/2007, 12h29
  5. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

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