ここで非常に簡単な質問があります。 Tkinter(python)では、ボタンを使用してアプリケーションの別のページ(登録ページやログインページなど)に移動するのは誰なのかと思っていました。 GUIにはウェブサイトのように「ページ」がないことを知っていますが、いくつかの異なる方法を見てきましたが、異なるページへのリンクを作成する最良の方法は何ですか?
どうもありがとうございました!
各ページをフレームにします。次に、ボタンで実行する必要があるのは、表示されているものをすべて非表示にし、目的のフレームを表示することです。
これを行う簡単な方法は、フレームを積み重ねて(これはplace
が意味をなす1回です)、次に表示したいフレームを_lift()
することです。この手法は、すべてのページが同じサイズの場合に最適です。実際には、含まれるフレームのサイズを明示的に設定する必要があります。
以下は、不自然な例です。これは問題を解決する唯一の方法ではなく、解決するのが特に難しい問題ではないことを証明するだけです。
import Tkinter as tk
class Page(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
def show(self):
self.lift()
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = tk.Label(self, text="This is page 1")
label.pack(side="top", fill="both", expand=True)
class Page2(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = tk.Label(self, text="This is page 2")
label.pack(side="top", fill="both", expand=True)
class Page3(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = tk.Label(self, text="This is page 3")
label.pack(side="top", fill="both", expand=True)
class MainView(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
p1 = Page1(self)
p2 = Page2(self)
p3 = Page3(self)
buttonframe = tk.Frame(self)
container = tk.Frame(self)
buttonframe.pack(side="top", fill="x", expand=False)
container.pack(side="top", fill="both", expand=True)
p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift)
b1.pack(side="left")
b2.pack(side="left")
b3.pack(side="left")
p1.show()
if __name__ == "__main__":
root = tk.Tk()
main = MainView(root)
main.pack(side="top", fill="both", expand=True)
root.wm_geometry("400x400")
root.mainloop()
このようなことができますか?
import tkinter
def page1():
page2text.pack_forget()
page1text.pack()
def page2():
page1text.pack_forget()
page2text.pack()
window = tkinter.Tk()
page1btn = tkinter.Button(window, text="Page 1", command=page1)
page2btn = tkinter.Button(window, text="Page 2", command=page2)
page1text = tkinter.Label(window, text="This is page 1")
page2text = tkinter.Label(window, text="This is page 2")
page1btn.pack()
page2btn.pack()
page1text.pack()
それは私にはずっと簡単に思えます。