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 :

Redimensionner une fenêtre et son contenu


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut Redimensionner une fenêtre et son contenu
    Bonjour
    en PyQt est ce qu'il existe une fonction qui permet redimensionner ma fenêtre et son contenu
    j'explique :
    dans ma fenêtre j'ai mes widgets quand je fait réduire diminuer la taille de la fenêtre avec la souris mes widget ne change pas de taille .
    ce que j’aimerais faire c'est si je rend la fenêtre plus petite , les widgets aussi devient plus petit par rapport à la taille de la fenêtre et si je la grandi aussi les widgets s'agrandissent ...
    merci

  2. #2
    Expert éminent

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

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

    C'est à cela que sert QSizePolicy

    http://www.riverbankcomputing.co.uk/...izepolicy.html

    Fais toi une fenêtre d'essai avec QDesigner, dans les propriétés de chaque widget que tu y mettras, joues avec les différentes sizePolicy et regardes le résultat avec la prévisualisation.

    Tu constateras que certains widgets se redimensionnent avec la fenêtre, QtableView, QThreeView, QGraphicsView, etc et d'autres conservent une dimension cohérente avec leur contenu et leur alignement avec d'autres widgets.

    Mais c'est en faisant des essais que tu comprendras au mieux la logique du redimensionnement des fenêtres.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    merci à toi
    voici un simple exemple qui marche avec un LinEdit
    mais j'ai une question , pourquoi on est obligé d'utiliser le Layout() pour que ça marche ???

    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
    # -*- coding: utf-8 -*-
     
     
    from PyQt4 import QtCore, QtGui
     
    class Ui_mainDialog(object):
        def setupUi(self, mainDialog):
            mainDialog.setObjectName("mainDialog")
            mainDialog.resize(866, 834)
            self.verticalLayout_3 = QtGui.QVBoxLayout(mainDialog)
            self.verticalLayout_3.setObjectName("verticalLayout_3")
            self.intituleEdit = QtGui.QLineEdit(mainDialog)
            self.intituleEdit.setGeometry(QtCore.QRect(160, 70, 200, 20))
            self.intituleEdit.setObjectName("intituleEdit")
     
            self.verticalLayout_3.addWidget(self.intituleEdit)
            self.horizontalLayout = QtGui.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
     
     
     
            spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
            self.horizontalLayout.addItem(spacerItem)
     
     
     
            self.retranslateUi(mainDialog)
            QtCore.QMetaObject.connectSlotsByName(mainDialog)
     
        def retranslateUi(self, mainDialog):
            mainDialog.setWindowTitle(QtGui.QApplication.translate("mainDialog", "texte", None, QtGui.QApplication.UnicodeUTF8))
            self.intituleEdit.setText(QtGui.QApplication.translate("mainDialog", "test", None, QtGui.QApplication.UnicodeUTF8))
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        mainDialog = QtGui.QDialog()
        ui = Ui_mainDialog()
        ui.setupUi(mainDialog)
        mainDialog.show()
        sys.exit(app.exec_())
    j'ai aussi une remarque sur le résultat du code , quand on le lance on voit que LineEdit s'affiche au premier temps sur toute la largeur de l'écran (la fenetre) et aussi au centre
    , est ce que on peut déterminer la larguer de lineEdit par rapport à la largeur de l’écran ?? nb: le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.intituleEdit.setGeometry(QtCore.QRect(160, 70, 200, 20))
    ne fonctionne plus pour déterminer la position de linEdit

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Les Layouts sont des grilles d'organisation de tes widgets dans la fenêtre de ton appli.

    Ces layouts peuvent être imbriqués de manière à grouper certains widgets de façon garantir leur alignement par exemple.

    Une QLineEdit occupera par défaut la largeur disponible dans la fenêtre (quid des langues qui s'écrivent verticalement ?) et donc si elle est seule elle occupera toute cette largeur.

    Ce qui est le cas dans l'exemple que tu donnes.

    Pour limiter cette occupation de l'espace, il faut utiliser un spacer horizontal à coté du lineEdit et mettre les deux ensemble dans un layout horizontal.

    Ici, tu as utilisé un layout vertical, dans lequel tu as mis un lineEdit et ensuite un spacer horizontal, soit ceci :

    __________
    | QLineEdit | >> QVBoxLayout
    | |/\/\/\/\/||
    |________ |

    Alors que tu devrais faire :

    _____________________
    | QLineEdit |\/\/\/\/\/\/|| >> QHBoxLayout
    |____________________|

    La méthode setGeometry() ne se justifie plus si l'on utilise correctement ses layout, mais je le répète, il faut faire moult essais dans le designer pour bien comprendre comment Qt gère tout cela.

    Le résultat est une fenêtre d'appli totalement dynamique, redimensionnable et où tu peux même faire apparaitre ou supprimer des widgets sans que ça ne foute le boxon.

  5. #5
    Nouveau membre du Club
    Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Le plus simple, je pense, est que tu utilises Qt Designer. Avec cet outils, un simple click droit dans un widget (QWidget qui contient a au moins un widget) permet de choisir "Layout in a grid". Tes composants sont automatiquement redimensionnés.
    Tu n'auras plus à te soucier de ce détails, c'est le rôle de PyQt...

Discussions similaires

  1. Redimensionner une fenêtre WPF à la taille de son contenu dynamique
    Par hbespoir2003 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 19/02/2012, 00h08
  2. redimensionner une jframe et son contenu.
    Par rageice dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 11/07/2007, 17h15
  3. Redimensionner une Frame et son contenu ?!?
    Par talkhor dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/01/2006, 12h28
  4. [procedure stockee] - Dupliquer une table et son contenu
    Par captusite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2006, 13h30
  5. [VB5]Connaitre l'index d'une liste via son contenu
    Par guda dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/10/2005, 15h08

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