【Python GUIサンプル】Tkinter ttk.Frameにreliefを指定して境界線を表示してみる
目次
Frame(フレーム)
Widgetをひとまとまりにまとめる入れ物

使用するモジュール
ttk.Frame
reliefオプション
・flat デフォルト 平坦
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="flat")
・groove 溝
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="groove")
・raised 出っ張り
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="raised")
・ridge 土手
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="ridge")
・solid grooveよりもやや太い?
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="solid")
・sunken 引っ込み
ttk.Frame(app,width =200,height=200,padding=(5,10),relief="sunken")
reliefオプションの指定での各Frame

フレームサイズを子のWidgetで変更されないようにする
通常フレームは子に他のWidgetを持った場合、子に合わせてサイズが変化してしまいます。
Frameのサイズを変更したくない場合は下記の関数を実行してください。
frame.propagate(False)
・Widgetを入れていない場合の表示

・propagate がTrue(デフォルト値はTrue)のときのFrame
ラベルを追加した場合。
grooveframe = ttk.Frame(firstFrame,width =200,height=200,padding=(5,10),relief="groove") grooveframe.pack(side ="left") grooveframe.propagate(True) groovelabel = ttk.Label(grooveframe,text="relief=groove") groovelabel.pack()

・propagate がFalseのときのFrame
grooveframe = ttk.Frame(firstFrame,width =200,height=200,padding=(5,10),relief="groove") grooveframe.pack(side ="left") grooveframe.propagate(False) groovelabel = ttk.Label(grooveframe,text="relief=groove") groovelabel.pack()

サンプル

サンプルコード
from tkinter import *
import tkinter.ttk as ttk
class FrameSampleApp(ttk.Frame):
def __init__(self, app):
super().__init__(app)
self.pack()
firstFrame =ttk.Frame(app,width =600,height=300)
firstFrame.pack()
flatframe = ttk.Frame(firstFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="flat")
flatframe.pack(side ="left")
flatframe.propagate(False)
flatlabel = ttk.Label(flatframe,text="relief=flat")
flatlabel.pack()
grooveframe = ttk.Frame(firstFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="groove")
grooveframe.pack(side ="left")
grooveframe.propagate(False)
groovelabel = ttk.Label(grooveframe,text="relief=groove")
groovelabel.pack()
raisedframe = ttk.Frame(firstFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="raised")
raisedframe.pack(side ="left")
raisedframe.propagate(False)
raisedlabel = ttk.Label(raisedframe,text="relief=raised")
raisedlabel.pack()
secoundFrame =ttk.Frame(app,width =600,height=300)
secoundFrame.pack()
ridgeframe = ttk.Frame(secoundFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="ridge")
ridgeframe.pack(side ="left")
ridgeframe.propagate(False)
ridgelabel = ttk.Label(ridgeframe,text="relief=ridge")
ridgelabel.pack()
solidframe = ttk.Frame(secoundFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="solid")
solidframe.pack(side ="left")
solidframe.propagate(False)
solidlabel = ttk.Label(solidframe,text="relief=solid")
solidlabel.pack()
sunkenframe = ttk.Frame(secoundFrame,width =200,height=200,padding=(5,10),borderwidth=30,relief="sunken")
sunkenframe.pack(side ="left")
sunkenframe.propagate(False)
sunkenlabel = ttk.Label(sunkenframe,text="relief=sunken")
sunkenlabel.pack()
if __name__ == '__main__':
#Tkインスタンスを作成し、app変数に格納する
app = Tk()
#縦幅600横幅300に画面サイズを変更します。
app.geometry("600x400")
#タイトルを指定
app.title("Frame Sample Program")
# #フレームを作成する
frame = FrameSampleApp(app)
# 格納したTkインスタンスのmainloopで画面を起こす
app.mainloop()