2016-05-26 30 views
1

我想要制作一个游戏,其中地图Tk()窗口打开,玩家选择位置,地图窗口关闭,并打开关卡窗口。当玩家有选择离开关卡并选择'是'时,等级Tk()应该关闭,地图应该打开,以便玩家可以点击不同的位置并打开另一个Tk()。由于某种原因,所有Tks都立即开放。这是我的代码。当只有一个人应该打开两个窗口

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

Tkinter/tkinte r应用程序中,您必须只有一个Tk()实例在同一时间运行。所以要解决你的问题,你可以简单地使用Toplevel()

相关问题