2016-07-15 30 views
3

ラベルの後ろにセパレータを含むカスタムウィジェットを作成しようとしています。区切り文字をウィンドウの両側にラベルの後ろに伸ばしてください(グリッドを使用)。 これを自分で作成しようとしましたが、セパレータをエッジに貼り付けることができませんでした。Python Tkinter TTK Separator with Label

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

私は、セパレータを拡大した唯一の方法は、ラベルにpadxを高めることでしたが、それは本当に問題を解決していません。

私はカスタムウィジェットを作成することに非常に慣れています。

答えて

2

あなたのコードの唯一の問題は、grid_columnconfigureを呼び出して、余分なスペースをどうするかをtkinterに伝えていないことです。余分なスペースで何をすべきかを内側のフレームに伝えていないので、それは空白のままです。ウィジェットが親に配置されて展開されるとき、あなたの内部ウィジェットは余分なスペースを使用していませんでした。

self.grid_columnconfigure(0, weight=1) 

親指の一般的なルールとして、あなたはいつもそれが子供たちをです管理するためにグリッドを使用して、親に少なくとも1行1列の重みを設定したい:

__init__はあなたに以下を追加します。 。

+0

ああ、ありがとうございます。私はそれが簡単なことを認識していませんでした... 私はソフトウェアを開発するときにグリッドマネージャを正しく使用しますが、これはウィジェットをテストすることでした。 – PotatoBeenCrafted