Restart Menu Issues

I think this will help you.

from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.gui.DirectGui import DirectWaitBar, DirectButton, DirectLabel

class MyApp(ShowBase):

    def __init__(self):
        ShowBase.__init__(self)
        
        self.disableMouse()
        self.camera.setPos(0, -20.0, 5)
        
        self.bar = DirectWaitBar(pos=(0, 0, -0.7), range=(100), value=(100))
        self.button = DirectButton(text = ("Start over?"), scale=.1, command=self.reset)
        self.button.hide()

        self.taskMgr.doMethodLater(0.09, self.life, "life-")
        
        self.label = DirectLabel(text="Game Over!", scale=0.1, pos=(0, 0, 0.2))
        self.label.hide()
        
        self.environ = self.loader.loadModel("environment")
        self.environ.reparentTo(self.render)
        
        self.box = self.loader.loadModel("box")
        self.box.reparentTo(self.render)
        
        camera.lookAt(self.box)
        camera.reparentTo(self.box)
        
        self.speed = 10.0
        
        self.move_forward = None
        self.move_back = None
        self.move_left = None
        self.move_right = None
        
        self.accept("w", self.setMove, ["forward", True])
        self.accept("w-up", self.setMove, ["forward", None])
        self.accept("s", self.setMove, ["back", True])
        self.accept("s-up", self.setMove, ["back", None])
        self.accept("a", self.setMove, ["left", True])
        self.accept("a-up", self.setMove, ["left",None])
        self.accept("d", self.setMove, ["right", True])
        self.accept("d-up", self.setMove, ["right",None])
        
        self.taskMgr.add(self.Move, "move")

    def setMove(self, name, vector):
        if name == "forward": self.move_forward = vector
        if name == "back": self.move_back = vector
        if name == "left": self.move_left = vector
        if name == "right": self.move_right = vector
            
            
    def Move(self, task):
        if self.move_forward != None:
            self.box.setY(self.box.getY()+self.speed*globalClock.getDt())
        if self.move_back != None:
            self.box.setY(self.box.getY()-self.speed*globalClock.getDt())
        if self.move_left != None:
            self.box.setX(self.box.getX()-self.speed*globalClock.getDt())
        if self.move_right != None:
            self.box.setX(self.box.getX()+self.speed*globalClock.getDt())
        return task.again

    def life(self, task):
        if (self.bar['value'] >= 0):
            self.bar['value'] -= 1
        else:
        
            taskMgr.remove("move")
            taskMgr.remove("life-")
            
            self.label.show()
            self.button.show()
            
            return task.done

        return task.again
        
    def reset(self):
    
        self.move_forward = None
        self.move_back = None
        self.move_left = None
        self.move_right = None
        self.box.setPos(0, 0, 0)
        self.bar['value'] = 100
        self.taskMgr.add(self.Move, "move")
        self.taskMgr.doMethodLater(0.09, self.life, "life-")
        self.button.hide()
        self.label.hide()



app = MyApp()
app.run()