Problème avec grid tkinter [Résolu]

Signaler
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
-
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
-
Bonjour,

Je débute en python et j'ai 12 ans.
En ce moment j'essaie de personnaliser une fenêtre à l'aide du module Tkinter.
Tout marche très bien mais quand j'utilise la commande <nom de l'image>.grid(row=<>, column=<>) ça ne fonctionne pas comme je le voudrais.

Je veux faire en sorte que mon image soit à gauche au milieux mais quand je met une valeur au dessus de 3 dans row exemple: <image>.grid(row=1 [ça marche] 2 [ça marche] 3 ou plus l'image reste à l'emplacement de la colonne 2. (Je ne sais pas si j'ai été clair.)

Bref, je n'arrives pas à placer les images, textes, boutons, ect... correctement car il se bloquent à certains endroits ou ne se placent pas où je veux...

Voilà le programme:
#Importer Tkinter
from tkinter import *


#Créer la fenêtre de départ
base = Tk()

#Personnaliser la fenêtre
base.title("WarriorPvP")
base.geometry("1080x720")
base.maxsize(1080, 720)
base.minsize(1080, 720)
base.iconbitmap("log.ico")
base.config(background='#6d071a')

#Creéer une frame
frame = Frame(base, bg='#6d071a')

#Créer l'image
width = 250
height = 250
image = PhotoImage(file="grhm.png").zoom(5).subsample(4)
canvas = Canvas(base, width=width, height=height, bg='#6d071a', bd=0, highlightthickness=0)
canvas.create_image(width/3, height/3, image=image)
canvas.grid(row=5, column=0)

#Ajouter le texte
present = Label(base, text="Bienvenue sur WarriorPvp", font=("Arial", 50), bg='#6d071a', fg='#18080b')
present.grid(row=5, column=3)

#Ajouter le bouton Jouer
play_button = Button(base, text="JOUER", font=("Arial", 25), bg='#1b1798', fg='#18080b')
play_button.grid(row=6, column=3)


#Afficher la fenêtre
base.mainloop()


5 réponses

Bonsoir,

Pour indiquer qu'une cellule doit occuper plusieurs lignes, il est nécessaire d'utiliser le paramètre rowspan dans la méthode grid.

#Créer l'image
# ...
canvas.grid(row=0, column=0, rowspan=2)


#Ajouter le texte
# ...
present.grid(row=0, column=1)


#Ajouter le bouton Jouer
# ...
play_button.grid(row=1, column=1)
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
5
Merci, tout marche bien le texte et le bouton jouer mais l'image ne veut toujours pas descendre elle reste dans le coin en haut à gauche alors que je voudrais la mettre au milieu à gauche, avez-vous une solution ?
#Créer l'image
width = 250
height = 250
image = PhotoImage(file="grhm.png").zoom(5).subsample(4)
canvas = Canvas(base, width=width, height=height, bg='#6d071a', bd=0, highlightthickness=0)
canvas.create_image(width/3, height/3, image=image)
canvas.grid(column=0, rowspan=5)
#Même si je modifies les valeurs si-dessus rien ne change à la position de l'image

#Ajouter le texte
present = Label(base, text="Bienvenue sur WarriorPvp", font=("Arial", 50), bg='#6d071a', fg='#18080b')
present.grid(row=2, column=1)

#Ajouter le bouton Jouer
play_button = Button(base, text="JOUER", font=("Arial", 25), bg='#1b1798', fg='#18080b')
play_button.grid(row=3, column=1)

Oui, il faut indiquer à l'aide des méthodes rowconfigure et columnconfigure la proportion de l'espace à occuper dans la frame parente.

base.rowconfigure(0, weight=1)
base.rowconfigure(1, weight=1)


Une autre petite chose, si tu ne veux pas que ta fenêtre soit redimensionnable, tu peux enlever le minsize et maxsize et ajouter un simple
base.resizable(False, False)
.
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
5
Merci pour l'astuce mais ce n'est pas très précis.
Est-ce possible de placer avec plus de précision l'image et le texte ?
Et c'est toujours pareil mais en un peu mieux l'image cette fois-ci reste bloquée au milieu de l'écran et je ne peut pas la faire descendre plus.
Bonjour,

Désolé, mais je ne vois ce que tu désires obtenir, tu voulais placer ton image au milieu à gauche, ce que je t'ai proposé permet de le faire, si tu souhaites obtenir une autre disposition, alors il faut adapter, et si tu n'y arrives pas, fais un petit croquis sur une image pour que l'on visualise comment tes éléments doivent être disposés dans ta fenêtre.
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
5
Cette fois-ci c'est le texte qui ne veut pas se placer correctement si je modifie la valeur de row et que je met 0 il se met trop haut et si je met 1 il se met trop bas.
Ce que je voulais dire c'est est-ce que il y a moyen de le mettre au centre de la fenêtre ?

Merci, Cordialement
Ce n'est pas en modifiant rows et columns que tu vas pouvoir changer la position des éléments, mais il y a aussi une façon en utilisant sticky, pad, padx, pady comme paramètres des méthodes grid pour ajuster aux petits soins.

Un exemple tout bête.

import tkinter as tk

base = tk.Tk()
base.geometry("400x200")
base.resizable(False, False)

base.rowconfigure(0, weight=1)
base.rowconfigure(1, weight=1)
base.columnconfigure(1, weight=1)

can = tk.Canvas(base, width=100, height=100, bg='yellow')
can.grid(row=0, column=0, rowspan=2)
can.create_text(50, 50, text='image', anchor=tk.CENTER)

lib = tk.Label(base, text="un texte qui raconte")
lib.grid(row=0, column=1, sticky=tk.S, pady=10)

bt = tk.Button(base, text="Valider")
bt.grid(row=1, column=1, sticky=tk.N, pady=10)

base.mainloop()
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
5
Merci j'ai compris et tout marche très bien.