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
Discussion :
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
Salut,
A ma connaissance, il n'existe rien dans tkinter qui permette d'obtenir cela sans écrire le code pour...
- W
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
15def 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)
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
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à?
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?
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
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
22width_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)
Partager