2016-07-15 2 views
3

J'essaie de créer un widget personnalisé qui comprend un séparateur derrière une étiquette. Je voudrais que le séparateur s'étende derrière l'étiquette de chaque côté de la fenêtre (en utilisant la grille). J'ai essayé de créer ceci moi-même, mais je n'ai pas pu obtenir le séparateur pour coller aux bords.Séparateur Python Tkinter TTK avec étiquette

import tkinter as tk 
from tkinter import ttk 

class LabelSeparator (tk.Frame): 
    def __init__ (self, parent, text = "", width = "", *args): 
     tk.Frame.__init__ (self, parent, *args) 

     self.separator = ttk.Separator (self, orient = tk.HORIZONTAL) 
     self.separator.grid (row = 0, column = 0, sticky = "ew") 

     self.label = ttk.Label (self, text = text) 
     self.label.grid (row = 0, column = 0, padx = width) 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.geometry ("200x40") 

    label = LabelSeparator (root, text = "Label", width = 15) 
    label.grid (sticky = "ew") 

    label2 = LabelSeparator (root, text = "A Second Label", width = 15) 
    label2.grid (sticky = "ew") 

    root.mainloop() 

Separator With Label

La seule manière que je trouvais d'élargir le séparateur était d'augmenter le padx sur l'étiquette, mais cela ne veut pas vraiment résoudre le problème.

Je dois mentionner que je suis très nouveau à la création de widgets personnalisés.

Répondre

2

Le seul problème avec votre code est que vous n'avez pas appelé grid_columnconfigure pour indiquer à tkinter quoi faire avec un espace supplémentaire. Puisque vous n'avez pas dit à l'image intérieure quoi faire avec un espace supplémentaire, elle l'a laissé vide. Lorsque le widget est placé dans son parent et se développe, vos widgets internes n'utilisent pas l'espace supplémentaire.

Ajouter ce qui suit dans votre __init__:

self.grid_columnconfigure(0, weight=1) 

En règle générale, vous voulez toujours régler le poids d'au moins une ligne et une colonne dans un parent qui utilise la grille pour gérer les enfants est il .

+0

Oh, merci beaucoup. Je ne me suis pas rendu compte que c'était si simple ... J'utilise correctement le gestionnaire de grille lorsque je développe un logiciel, c'était juste pour tester le widget. – PotatoBeenCrafted