web-dev-qa-db-fra.com

tkinter ttk separator ne s'affichera pas

Considérons ce code simple:

from Tkinter import *
import ttk
root= Tk()
ttk.Label(root, text='Heading Here').grid(row=1, column=1)
ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)
root.mainloop()

Lorsque je lance ce code, le séparateur est presque invisible.
ttk separator not visible
Je l'ai marqué d'une flèche rouge, si vous pouvez le voir comme un petit point.

Comment faire en sorte que le séparateur couvre toute la largeur horizontale, ou au moins, soit visible?

17
bhaskarc

Le séparateur a une largeur naturelle de 1 pixel. Vous lui avez dit de réserver l'espace sur cinq colonnes, mais vous n'avez pas demandé que le séparateur remplisse réellement ces cinq colonnes. Pour résoudre ce problème, fournissez l'attribut sticky, qui indique "s'il y a plus d'espace que nécessaire pour ce widget, faites en sorte que ses bords" collent "à des côtés spécifiques de son conteneur".

Dans ce cas, vous souhaitez que le séparateur adhère aux bords gauche et droit de son conteneur. Les attributs collants utilisent les points de la boussole pour les valeurs, vous voulez donc "e" pour est et "w" pour ouest:

ttk.Separator(...).grid(..., sticky="ew")
24
Bryan Oakley

La solution sticky de @ Bryan convient, mais ne résout qu'une partie du cas, car le séparateur ne couvrira pas toute la largeur horizontale (que vous avez demandée). Voici une solution alternative que vous pouvez appliquer: Au lieu de .grid(), utilisez place() layout et contrôlez entièrement la position, la largeur (longueur) et même la hauteur du séparateur. Pour appliquer simplement cela au cas présent (sans aucune fonctionnalité supplémentaire) et couvrir toute la largeur horizontale, il suffit de:

Remplacer

ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)

avec

ttk.Separator(root).place(x=0, y=26, relwidth=1)

Vous pouvez définir le "y" comme vous le souhaitez. Notez également que orient=HORIZONTAL n'est pas nécessaire car c'est l'option par défaut. (Consultez http://effbot.org/tkinterbook/place.htm pour plus de détails et des exemples d'utilisation de la présentation `.option () '.)

2
Apostolos