2016-05-26 6 views
1

マップTk()ウィンドウが開き、プレイヤーが場所を選択し、マップウィンドウが閉じ、レベルウィンドウが開くゲームを作成しようとしています。プレイヤーがレベルを残して「はい」を選択すると、レベルTk()が閉じ、マップが開いて、プレイヤーは別の場所をクリックして別のTk()を開くことができるようになります。何らかの理由で、すべてのTksがすぐに開かれています。ここに私のコードです。2つのWindowsが1つしか開いていない場合

class GUI_Control: 
    def __init__(self, player, delegate, level=-1): 
     self.delegate = delegate 
     self.player = player 
     self.current_level = level 
     self.map = Map(self) 
     self.current_level = level 

     #define level gui's here and put in data structure 
     hydra_level = Hydra_Level(self) 
     self.windows = [hydra_level] 

    def open(self): 
     if self.current_level == -1: 
      self.map.mainloop() 
     else: 
      self.current_level.mainloop() 

    def save(self): 
     self.delegate.save() 

    def swap_window(self, n): 
     #pull up the specified window 
     self.windows[n].mainloop() 



class Map(Tk): 
    MAP_WIDTH = 600 
    MAP_HEIGHT = 375 

    def __init__(self, listener, *args, **kwargs): 
     Tk.__init__(self, *args, **kwargs) 
     self.listener = listener 
     # define map gui here 
     self.canvas = Canvas(self, width=self.MAP_WIDTH, height=self.MAP_HEIGHT) 
     self.canvas.pack() 
     self.map_picture = PhotoImage(file=r"images/archipelago.gif") 
     self.canvas.create_image(0, 0, image=self.map_picture) 

    def destroy(self, n=0): 
     Tk.destroy(self) 
     #send message back to gui_control to bring up another window 
     self.listener.swap_window(n) 

class Hydra_Level(Tk): 
    def __init__(self, listener, *args, **kwargs): 
     Tk.__init__(self, *args, **kwargs) 
     self.listener = listener 

    def destroy(self): 
     Tk.destroy(self) 
     #bring up the map again by sending message back to the control 
     self.listener.open() 

マップとレベルの両方のウィンドウは、GUI_Control.open()関数で開きます。一度に1つずつ開く方法はありますか?

答えて

1

Tkinter/tkinte rアプリケーションでは、1つのTk()インスタンスを同時に実行する必要があります。したがって、問題を解決するには、単にToplevel()を使用してください。

関連する問題