Tkinterで画面遷移を実装する方法

Pythonで手軽にGUIアプリケーションを作れるモジュール、Tkinterで画面遷移を実装してみました。

Tkinterで画面遷移を実装する方法はいくつかあります。

例えばこんな感じ。

① 画面ごとにそれぞれ別のウィジェットを用意して、遷移のたびにWigetを作ったり消したりする方法

② rootウィジェットの上にFrameを用意して、そのFrameを作ったり消したりする方法

③ Frameの中身を書き換える方法

④ メインのウィジェットやFrameは消さずに、同じ座標に新しいFrameをかぶせる方法

などなど。

今回はなぜか一番見づらくて無駄な処理の多い①の方法で作ってしまいました。
備忘録としてコードだけ貼っておきます。

ボタンを押すと別のWindowが立ち上がるだけの処理です。
もう少しTkinterを使いこなせるようになったら、もっと効率的な方法に書き直してみようと思います。

ソースコード

from tkinter import *
from tkinter import ttk

def wiget_destroy():
    root.destroy()

def first_gui():
    def change_display():
        root.destroy()
        second_gui()

    root = Tk()
    root.title("second tk")
    textvar = StringVar()

    content = ttk.Frame(root)
    content['padding'] = (15,10,15,0)
    namelbl = ttk.Label(content,text='this is first')

    cancel = ttk.Button(content, text="変更", command=change_display)

    content.grid(column=1, row=0)
    namelbl.grid(column=1, row=0, columnspan=2)
    cancel.grid(column=2, row=2)

    root.mainloop()

def second_gui():
    def change_display():
        root.destroy()
        first_gui()

    root = Tk()
    root.title("second tk")
    textvar = StringVar()

    content = ttk.Frame(root)
    content['padding'] = (15,10,15,0)
    namelbl = ttk.Label(content,text='this is second')

    cancel = ttk.Button(content, text="変更", command=change_display)

    content.grid(column=1, row=0)
    namelbl.grid(column=1, row=0, columnspan=2)
    cancel.grid(column=2, row=2)

    root.mainloop()

if __name__ == '__main__':
    first_gui()

参考

⑫ 画面遷移の処理を定義(最終回)【python tkinter sqlite3で家計簿を作る】