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つずつ開く方法はありますか?