Tkinter でフレームワークを切り替える方法
胡金庫
2020年6月25日
このチュートリアルでは、ボタンをクリックして Tkinter GUI の他の部分に切り替えてから、この新しいフレームのボタンをクリックしてメインフレームに戻ります。
既存のフレームワークを閉じて新しいフレームワークに置き換えることでフレームワークを切り替える
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_frame
に PageOne
パラメーターを渡します。ボタンをクリックした後、swtich_frame
関数を呼び出します。