J'ai cherché beaucoup d'exemples avant de poster mais je ne peux toujours pas utiliser correctement la grille tkinter.
Ce que je veux:
mon code:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
b1 = ttk.Button(root, text='b1')
b1.grid(row=0, column=0, sticky=tk.W)
e1 = ttk.Entry(root)
e1.grid(row=0, column=1, sticky=tk.EW)
t = ttk.Treeview(root)
t.grid(row=1, column=0, sticky=tk.NSEW)
scroll = ttk.Scrollbar(root)
scroll.grid(row=1, column=1, sticky=tk.E+tk.NS)
scroll.configure(command=t.yview)
t.configure(yscrollcommand=scroll.set)
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)
root.mainloop()
La solution simple et rapide consiste à définir le columnspan
du treeview
. Cela indiquera à l'arborescence de se répartir sur 2 colonnes et permettra à l'entrée déposée de s'asseoir à côté de votre bouton.
Sur une note indépendante, vous pouvez utiliser des chaînes pour votre sticky
afin de ne pas avoir à faire des choses comme tk.E+tk.NS
. À la place, utilisez simplement "nse"
Ou toutes les directions dont vous avez besoin. Assurez-vous que vous pensez les faire dans l'ordre de "nsew"
.
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
b1 = ttk.Button(root, text='b1')
b1.grid(row=0, column=0, sticky="w")
e1 = ttk.Entry(root)
e1.grid(row=0, column=1, sticky="ew")
t = ttk.Treeview(root)
t.grid(row=1, column=0, columnspan=2, sticky="nsew") # columnspan=2 goes here.
scroll = ttk.Scrollbar(root)
scroll.grid(row=1, column=2, sticky="nse") # set this to column=2 so it sits in the correct spot.
scroll.configure(command=t.yview)
t.configure(yscrollcommand=scroll.set)
# root.columnconfigure(0, weight=1) Removing this line fixes the sizing issue with the entry field.
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)
root.mainloop()
Résultats:
Pour résoudre votre problème que vous mentionnez dans les commentaires, vous pouvez supprimer root.columnconfigure(0, weight=1)
pour que l'entrée se développe correctement.