【Python GUIサンプル】Tkinter ttk.Frameにreliefを指定して境界線を表示してみる

<tkinterトップページに戻る>

Frame(フレーム)

Widgetをひとまとまりにまとめる入れ物

frame0

使用するモジュール

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

frame0

フレームサイズを子のWidgetで変更されないようにする

通常フレームは子に他のWidgetを持った場合、子に合わせてサイズが変化してしまいます。

Frameのサイズを変更したくない場合は下記の関数を実行してください。

frame.propagate(False)

・Widgetを入れていない場合の表示

frame

・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_True

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

propagate_False

 

サンプル

frame_sample

 

サンプルコード

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

 

 

あわせて読みたい