Tkinter でフレームワークを切り替える方法

胡金庫 2020年6月25日
Tkinter でフレームワークを切り替える方法

このチュートリアルでは、ボタンをクリックして Tkinter GUI の他の部分に切り替えてから、この新しいフレームのボタンをクリックしてメインフレームに戻ります。

Tkinter スイッチングフレームワーク

既存のフレームワークを閉じて新しいフレームワークに置き換えることでフレームワークを切り替える

try:
    import Tkinter as tk
except:
    import tkinter as tk


class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.switch_frame(StartPage)

    def switch_frame(self, frame_class):
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()


class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Label(self, text="Start page", font=("Helvetica", 18, "bold")).pack(
            side="top", fill="x", pady=5
        )
        tk.Button(
            self, text="Go to page one", command=lambda: master.switch_frame(PageOne)
        ).pack()
        tk.Button(
            self, text="Go to page two", command=lambda: master.switch_frame(PageTwo)
        ).pack()


class PageOne(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self, bg="blue")
        tk.Label(self, text="Page one", font=("Helvetica", 18, "bold")).pack(
            side="top", fill="x", pady=5
        )
        tk.Button(
            self,
            text="Go back to start page",
            command=lambda: master.switch_frame(StartPage),
        ).pack()


class PageTwo(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self, bg="red")
        tk.Label(self, text="Page two", font=("Helvetica", 18, "bold")).pack(
            side="top", fill="x", pady=5
        )
        tk.Button(
            self,
            text="Go back to start page",
            command=lambda: master.switch_frame(StartPage),
        ).pack()


if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

switch_frame(self, frame_class) メソッドは既存のフレームを破壊し、それを新しいフレーム frame_class に置き換えます。

tk.Button(self, text="Go to page one", command=lambda: master.switch_frame(PageOne)).pack() は、ボタンコマンド switch_framePageOne パラメーターを渡します。ボタンをクリックした後、swtich_frame 関数を呼び出します。

著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook