2016-05-25 7 views
0

私はウィンドウ内のボタンに新しいウィンドウを開き、前のウィンドウを閉じるようにします。 1つのボタンでこれらの両方を行うことは可能ですか?私は、次のコードで試してみたが、それは働いていない、ちょうどそのウィンドウが定義されていない私に言った:別の関数でtkinterウィンドウを閉じるにはどうしたらいいですか?

import tkinter 
def window1(): 
    window = tkinter.Tk() 
    tkinter.Button(window, text = "Next", command = window2).pack() 
    window.mainloop() 
def window2(): 
    window.destroy() #This is where the error is 
    menu = tkinter.Tk() 
    etc, etc, etc 
window1() 
+0

これは宿題ですか?これは私が最後の1時間に見たこのトピックのほぼ正確な2番目の質問です。 –

答えて

1

まず、あなたが最初の関数からのウィンドウオブジェクトを返す必要があります。

def window1(): 
    window = tkinter.Tk() 
    tkinter.Button(window, text = "Next", command = lambda: window2(window)).pack() 
    window.mainloop() 
    return window 

その後、あなたはあなたの関数の引数としてウィンドウを渡す必要があります。その後、

def window2(window): 
    window.destroy() 
    menu = tkinter.Tk() 

としてwindow1を呼び出す:

window = window1() 

し、それを破壊し、これは通常、再作成Tkの()のインスタンスを作成、破棄より良い選択であるToplevelsを、使用した例である残り

+0

ボタンを使用してパラメータを渡す方法のかなり重要な部分は除外しました。 –

+0

これを今追加しました... – Munir

+0

'return window'は少し無意味です。なぜなら、ウィンドウは関数が復帰するまでに破棄されたからです。 –

1

を行うには、ボタンをクリックしてください。一意のToplevel IDは、partial()を使用してclose_it関数に渡されます。もちろん、それらを組み合わせたり、close関数にopen関数を呼び出すこともできます。

try: 
    import Tkinter as tk  ## Python 2.x 
except ImportError: 
    import tkinter as tk  ## Python 3.x 

from functools import partial 

class OpenToplevels(): 
    """ open and close additional Toplevels with a button 
    """ 
    def __init__(self): 
     self.root = tk.Tk() 
     self.button_ctr=0 
     but=tk.Button(self.root, text="Open a Toplevel", 
         command=self.open_another) 
     but.grid(row=0, column=0) 
     tk.Button(self.root, text="Exit Tkinter", bg="red", 
        command=self.root.quit).grid(row=1, column=0, sticky="we") 
     self.root.mainloop() 

    def close_it(self, id): 
     id.destroy() 

    def open_another(self): 
     self.button_ctr += 1 
     id = tk.Toplevel(self.root) 
     id.title("Toplevel #%d" % (self.button_ctr)) 
     tk.Button(id, text="Close Toplevel #%d" % (self.button_ctr), 
        command=partial(self.close_it, id), 
        bg="orange", width=20).grid(row=1, column=0) 

Ot=OpenToplevels() 
0

はい。可能だ。あなたはを破壊し、それが動作します何をしたいウィンドウのあなたの名前を入れて、あなたは気づいてどのように

def window1: 
    blablabla 
    blablabla 
def window2: 
    window2.destroy() <-- Here where the error was 

:しかし、あなたはデフそのする必要があります!

関連する問題