web-dev-qa-db-ja.com

tkinter ttkセパレータが表示されない

この単純なコードを考えてみましょう:

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()

このコードを実行すると、セパレーターはほとんど見えません。
ttk separator not visible
あなたがそれを小さな点のようなものとして見ることができるなら、私はそれを赤い矢印でマークしました。

セパレータを水平方向の幅全体に広げる、または少なくとも表示するにはどうすればよいですか?

25
bhaskarc

セパレータの自然な幅は1ピクセルです。 5つの列にまたがるスペースを予約するように指示しましたが、セパレーターが実際に5つの列を埋めることを要求していません。これを解決するには、sticky属性を指定します。これは、「このウィジェットに必要以上のスペースがある場合は、ウィジェットの端をそのコンテナの特定の側面に「くっつく」ようにする」ことを示します。

この場合、セパレーターをコンテナーの左端と右端に貼り付けます。スティッキー属性は値にコンパスのポイントを使用するため、東に「e」、西に「w」が必要です。

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

@Bryanのsticky解は問題ありませんが、セパレーターが水平方向の幅全体をカバーしないため(ユーザーが要求したとおり)、ケースの一部のみが解決されます。適用できる代替ソリューションは次のとおりです:.grid()の代わりにplace()レイアウトを使用して、位置、幅(長さ)、さらにはセパレーターの高さを完全に制御します。これを現在のケースに適用し(追加機能なし)、水平方向の幅全体をカバーするには、次のようにします。

交換する

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

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

'y'は自由に設定できます。また、orient=HORIZONTALはデフォルトのオプションなので必要ありません。 ( `.option() 'レイアウトの詳細と使用例については http://effbot.org/tkinterbook/place.htm を確認してください。)

5
Apostolos