我在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
然而,这会导致程序崩溃并且不会暂停。
出了什么问题,我该如何解决?
答案 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()