2017-02-03 5 views
0

これをできるだけ短くする - 私のプログラムではPage1で始まり、ボタンを押すとPage2を開き、Page1を閉じるとページ2を開くことができましたが、閉じることはできませんPage1、私は.destroy()を使ってみましたが、ページだけでなくすべてを閉じます。私はここでいくつかの質問を見ていましたが、私のコードと同じレイアウトではそれほど多く見つけることができませんでした。これは私の最初のtkinterプロジェクトです。私はまだそれを把握しています。tkinterでウィンドウを閉じるときに問題が発生する

私のコードは;

class Page1: 
    def __init__(self,master): 
     self.master = master 
     #lots of labels and buttons 
     self.BTNNextPage = ttk.Button(master, text = "Proceed", 
            command = self.NextPage) 
     self.BTNNextPage.place(x=450, y=420) 

    def NextPage(self): 
     self.newWindow = tk.Toplevel(self.master) 
     self.app = Page2(self.newWindow) 
     self.master.destroy() 

class Page2(): 
    def __init__(self,master): 
     self.master = master 
     #tried Page1.destroy() here but Page1 has no attibute destroy 
     #more labels and buttons 

def main(): 
    widthpixels=690 
    heightpixels=500 
    root = tk.Tk() 
    root.resizable(width=False, height=False) 
    root.configure(background='black') 
    root.iconbitmap("Image") 
    root.wm_title("Title") 
    root.geometry('{}x{}'.format(widthpixels, heightpixels)) 
    app = Page1(root) 
    root.mainloop() 

if __name__ == "__main__": 
    main() 

答えて

2

あなたがrootを破壊した場合、それはPage2含め含まれているすべてのウィジェットを、破壊します。あなたの答えのための

import tkinter as tk 
from tkinter import ttk 

class Page1(tk.Frame): 
    def __init__(self, master, **kwargs): 
     tk.Frame.__init__(self, master, **kwargs) 
     self.pack(fill='both', expand=True) # display page 1 
     #lots of labels and buttons: 
     tk.Label(self, text='Page 1').place(relx=0.5, rely=0.5) 
     self.BTNNextPage = ttk.Button(self, text="Proceed", command=self.NextPage) 
     self.BTNNextPage.place(x=450, y=420) 

    def NextPage(self): 
     self.app = Page2(self.master) # create page 2 
     self.destroy() # remove page 1 

class Page2(tk.Frame): 
    def __init__(self, master, **kwargs): 
     tk.Frame.__init__(self, master, **kwargs) 
     self.pack(fill='both', expand=True) # display page 2 
     # create widgets on page 2 
     tk.Label(self, text='Page 2').pack() 
     tk.Button(self, text='Quit', command=self.master.destroy).pack(side='bottom') 

def main(): 
    widthpixels=690 
    heightpixels=500 
    root = tk.Tk() 
    root.resizable(width=False, height=False) 
    root.configure(background='black') 
    root.wm_title("Title") 
    root.geometry('{}x{}'.format(widthpixels, heightpixels)) 
    app = Page1(root) 
    root.mainloop() 

if __name__ == "__main__": 
    main() 
+0

感謝しかしPage1のdoesntの取得、削除、PAGE2がちょうど 'それ – badNameHere

+0

上にオーバーレイされています。彼らはdestroyメソッドを持つようにのみ1ページを破壊するために、一つの可能​​性は、ページクラスはtk.Frameを継承することです'NextPage'のself.destroy()はpage1を破壊するので、page2はオーバーレイされません。 –

+0

これを実行すると、次のボタンを押すと、page1とpage2の内容が同じウィンドウに表示されます。 – badNameHere

関連する問題