2016-08-18 22 views
-1

私は2つのウィンドウを生成するために、次のサンプルコードを使用しています:Python、複数のウィンドウ間でイベントを処理する方法は?

import Tkinter as tk 

class Demo1: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window) 
     self.button1.pack() 
     self.frame.pack() 
    def new_window(self): 
     print 1 
     self.newWindow = tk.Toplevel(self.master) 
     print 2 
     self.app = Demo2(self.newWindow) 
     print 3 

class Demo2: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.close_windows) 
     self.quitButton.pack() 
     self.frame.pack() 
    def close_windows(self): 
     self.master.destroy() 

def main(): 
    root = tk.Tk() 
    app = Demo1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

私は「1」(または多分「2」)がnew_window()メソッドが呼び出されたときに、印刷されることを期待します。私はDemo2が閉じられたときに "3"が印刷されることを期待しています! しかし、button1を押すと、3つのprint文がすべて実行されました。 どうすればそれを処理できますか?

+0

... –

+0

主な目的は、いくつかの情報フォームを管理するために第2の窓を使用している... –

+0

@BasicWolfは、私が知っている「なぜそれが起こるのでしょうか?」。私はそれを管理する方法を知らない...! –

答えて

2

wait_windowメソッドを使用すると、2番目のウィンドウが破棄されるのを待ってから、最初のウィンドウの次のステートメントに進むことができます。

私はあなたのコードを修正するように修正しました。それがお役に立てば幸い -

貧しい文言を気の毒
import Tkinter as tk 

class Demo1(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) 
     self.master = master 
     self.frame = tk.Frame(self.master) 
     self.button1 = tk.Button(self.frame, text = 'New Window', width = 25, command = self.new_window) 
     self.button1.pack() 
     self.frame.pack() 
    def new_window(self): 
     print 1 
     # self.newWindow = tk.Toplevel(self.master) 
     print 2 
     self.app = Demo2(self).display_window() 
     print 3 

class Demo2: 
    def __init__(self, master): 
     self.master = tk.Toplevel(master) 
     self.frame = tk.Frame(self.master) 
     self.quitButton = tk.Button(self.frame, text = 'Quit', width = 25, command = self.master.destroy) 
     self.quitButton.pack() 
     self.frame.pack() 

    def display_window(self): 
     self.master.wait_window() 
     return 0 

def main(): 
    root = tk.Tk() 
    app = Demo1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main()