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