2013-02-11 10 views
15

私はここでかなり簡単な質問があります。 Tkinter(Python)では、ボタンを使用してアプリケーションの異なるページ、例えば登録ページやログインページに行く人が誰か不思議に思っていました。私は、GUIにはウェブサイトのような「ページ」がないことを認識していますが、いくつかの異なる方法で見られますが、異なるページへのリンクを作る最良の方法は何ですか?Tkinterのボタンを使ってアプリケーションの別のページに移動しますか?

ありがとうございました!

答えて

17

各ページをフレームにします。次に、すべてのボタンは表示されているものを隠すだけで、目的のフレームを表示させる必要があります。

これを行う簡単な方法は、フレームを重ね合わせることです(これは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() 
+0

! –

+0

@CasparWylie:この例はすべて、この例全体が1ブロックのテキストであることを意味しています。あなたはそれをあなたが望む数のファイルに分割することができます - それは解決策とは関係ありません。それぞれの "ページ"は簡単に独自のモジュールになることができます。 –

+0

@BryanOakley、このようなことにノートブックを使う方が良いのではないでしょうか? http://www.tkdocs.com/tutorial/complex.html#notebook – user3885927

関連する問題