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

Python Discussion :

Peut on forcer une fenêtre Tkinter à garder ses proportions tout en pouvant la redimensionner?


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Peut on forcer une fenêtre Tkinter à garder ses proportions tout en pouvant la redimensionner?
    Bonjour,
    Je voulais savoir s'il était possible sur Tkinter de forcer une fenêtre à garder ses proportions (exemple: une fenêtre de 1280/720 peut être redimensionnée à 640/360 mais pas à 1280/360).
    Si oui, comment?
    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    A ma connaissance, il n'existe rien dans tkinter qui permette d'obtenir cela sans écrire le code pour...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    J'ai essayé ce code mais ça ne marche pas du tout, pourquoi?
    Voilà le bout de code en question:

    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
    def configuration(event):
        w = app.winfo_width()
        h = app.winfo_height()
        Startpage.config(width=w, height=h)
        titre.config(font=('Papyrus',w//20))
        if escape_state == True:
            escape_window.config(height=h//2.88, width=w//2.66)
            bouton_yes.config(font=('Bauhaus 93', w//42))
            bouton_no.config(font=('Bauhaus 93', w//42))
            confirmation.config(font=('Bauhaus 93', w//33))
        if w/h != 1280/720:
            w = h*(1280/720)
            app.config(width=w)
    
    app.bind('<Configure>', configuration)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    Déjà quand vous postez du code, il est préférable d'utiliser la balise code car sinon on a de la peine à vous lire (et c'est dommage quand on demande de l'aide).

    Puis dire juste "çà ne marche pas" n'a aucun intérêt: si çà marchait vous ne demanderiez pas de l'aide. Par contre le décrire correctement, "je voulais obtenir... et çà donne..." est le premier pas vers l'approche d'une solution.

    Programmer c'est pas facile, donc on découpe le problème en parties puis on assemble. Ici la partie est "comment faire pour que l'interaction entre l'utilisateur qui change les dimensions de la fenêtre force ces dimensions à des valeurs prédéfinies".

    Et pour voir comment le mettre au point, quelques lignes de code où il n'y a que çà suffisent. Ce qui permet de poster un code et reproduire le problème avec le scenario/interaction envisagé. (sans avoir à vous embarquer à décrire le problème avec un vocabulaire technique que vous ne maîtrisez peut être pas encore)

    Alors ce qui ont du temps pourront peut être vous suggérer une solution.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    J'ai expliqué dans mon premier message ce que je voulais obtenir donc je ne vois pas l'intérêt de le répéter encore une fois, et ensuite ce que j'ai obtenu avec ce code c'est... Rien... Sinon bien évidemment que j'aurais expliqué un peu plus. Surtout que dans mon code je met la partie importante en gras pour directement la voir et je laisse une partie du reste du code au cas ou ça aiderais à mieux comprendre ou si c'est carrément la source du problème.
    Mais effectivement j'aurais pu rajouter: Je ne comprends pas pourquoi la hauteur de ma fenêtre 'app' ne prends pas la nouvelle valeur w donnée par h/(1280/720).

    edit: j'ai rajouté print(h, w) pour essayer de comprendre si le problème était au niveau de la prise de valeur de w ou au niveau de app.config() et j'ai remarqué que w prend bien la valeur h/(1280/720) quand je modifie la hauteur de la fenêtre donc je ne comprend pas pourquoi app.config() ne change pas les dimensions de ma fenêtre...
    Par contre quand je modifie la largeur de ma fenêtre ni h, ni w change, peut être que le problème vient de là?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par Thewhyap Voir le message
    Je ne comprends pas pourquoi la hauteur de ma fenetre 'app' ne prends pas la nouvelle valeur h donnée par w/(1280/720).
    Probablement parce que app.configure génère aussi un event '<Configure>' à gérer différemment? Peut être que sur l'environnement XYZ on a un comportement différent?

    Sans code pour reproduire, nombre d'hypothèses sont plausibles.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Probablement parce que app.configure génère aussi un event '<Configure>' à gérer différemment?
    Je me suis posé la question en réfléchissant sur pourquoi ça marchait pas, et effectivement je me suis dit que c'était peut être ça en espérant que non car j'ai aucune idée de comment régler ce problème... Pas grave j'abandonne l'idée pour le moment et j'y reviendrais plus tard.
    Merci

    edit: existe t-il un event '<Configure>' mais que pour height ou width?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par Thewhyap Voir le message
    edit: existe t-il un event '<Configure>' mais que pour height ou width?
    La réponse à ce genre de question devrait être dans la documentation. Tout ce que je peux dire, c'est que de mémoire, çà ne me dit rien.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    C'est justement car je n'ai rien vu de tel dans la documentation donc je voulais demander au cas ou

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par Thewhyap Voir le message
    C'est justement car je n'ai rien vu de tel dans la documentation donc je voulais demander au cas ou
    Une documentation est une sorte de document contractuel: si çà ne se comporte pas comme décrit, çà s'appelle un bug (dans le produit ou la documentation).

    Et si on trouve une astuce pour faire un truc non documenté, possible que çà casse dans une version suivante sans mention dans le release notes (puisqu'on n'est pas sensé en connaître l'existence).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé moi même la solution à mon problème et je vous la partage au cas ou quelqu'un en aurait besoin:
    J'ai utilisé app.geometry() au lieu de app.config(), et j'ai créé 2 variables: w2 et h2 pour détecter les changements.
    (Le code n'est surement pas parfait donc si quelqu'un sait comment l'améliorer qu'il n'hésite pas, mais en tout cas ce code fonctionne)
    Autre remarque importante: j'utilise un ordinateur avec un écran 16/9 donc si le votre est un 16/10 par exemple vous avez juste à remplacer 9 par 10

    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
    width_screen = app.winfo_screenwidth()
    height_screen = app.winfo_screenheight()
    w = app.winfo_width()
    h = app.winfo_height()
    w2 = width_screen
    h2 = height_screen
    def configuration(event):
        global w
        global h
        global w2
        global h2
        w = app.winfo_width()
        h = app.winfo_height()
        if h != h2:
            w = h * (16/9)//1
            h2 = h
            app.geometry("%dx%d" % (w, h2//1))
        elif w != w2:
            h = w * (9/16)//1
            w2 = w
            app.geometry("%dx%d" % (w2//1, h))
    app.bind('<Configure>', configuration)

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

Discussions similaires

  1. [XL-2003] Forcer une fenêtre UserForm au-dessus de tout ?
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/10/2015, 16h53
  2. Réponses: 2
    Dernier message: 27/12/2007, 17h10
  3. [C# .NET 2.0]Forcer une fenêtre à être cachée
    Par JoSii dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/09/2006, 14h47
  4. Réponses: 12
    Dernier message: 11/04/2005, 18h31

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