无限期暂停python tkinter脚本

时间:2014-05-20 16:20:31

标签: python tkinter

我在Tkinter中有一个游戏,我希望在其中实现一个暂停选项。我想bind p 来停止脚本。我尝试使用time.sleep,但我想暂停游戏,直到用户按下 u 。我试过了:

def pause(self, event):
    self.paused = True
    while self.paused:
        time.sleep(0.000001)
def unpause(self, event):
    self.paused = False

然而,这会导致程序崩溃并且不会暂停。

出了什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

while创建一个循环,使GUI循环不响应任何东西 - 包括KeyPress绑定。在pause方法中调用time.sleep(9999999)只会做同样的事情。我不确定你的程序的其余部分是如何构建的,但你应该查看after()方法,以便轻松添加启动和停止功能。这是一个简单的例子:

class App(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.text = Text(self)
        self.text.pack()

        self._unpause(None) # start the method

        self.bind_all('<p>', self._pause)
        self.bind_all('<u>', self._unpause)

    def _unpause(self, event):
        '''this method is the running portion. after its
        called, it continues to call itself with the after
        method until it is cancelled'''
        self.text.insert(END, 'hello ')
        self.loop = self.after(100, self._unpause, None)

    def _pause(self, event):
        '''if the loop is running, use the after_cancel
        method to end it'''
        if self.loop is not None:
            self.after_cancel(self.loop)

root = Tk()
App(root).pack()
mainloop()