def check_queue(self):
"""Timer callback to check command queue"""
try:
while True:
window_size = turtle.window_width(), turtle.window_height()
if self.window_size != window_size:
self.redraw()
turtle.ontimer(self.check_queue, 200)
break
cmd = self.queue.get_nowait()
cmd()
if cmd == self.do_close:
break
except queue.Empty:
turtle.ontimer(self.check_queue, 100)
except turtle.Terminator:
pass
except KeyboardInterrupt:
turtle.bye()
python类Terminator()的实例源码
def __init__(self):
self.queue = queue.Queue(maxsize=1)
self.margin = [0, 0, 0, 0]
self.plot_area = (0, 0, 255, 1023)
self.min_size = (2, 8)
self.zoom_area = [*self.plot_area]
self.scale = 1
self.font = ('Ariel', 8)
self.closed = False
self.window_size = None
self.tables = []
try:
turtle.setup()
except turtle.Terminator:
turtle.setup()
def startDemo(self):
self.refreshCanvas()
self.dirty = True
turtle.TurtleScreen._RUNNING = True
self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
"demo running...", "black")
self.screen.clear()
self.screen.mode("standard")
self.state = RUNNING
try:
result = self.module.main()
if result == "EVENTLOOP":
self.state = EVENTDRIVEN
else:
self.state = DONE
except turtle.Terminator:
self.state = DONE
result = "stopped!"
if self.state == DONE:
self.configGUI(NORMAL, NORMAL, DISABLED, NORMAL,
result)
elif self.state == EVENTDRIVEN:
self.exitflag = True
self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
"use mouse/keys or STOP", "red")
def startDemo(self):
self.refreshCanvas()
self.dirty = True
turtle.TurtleScreen._RUNNING = True
self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
"demo running...", "black")
self.screen.clear()
self.screen.mode("standard")
self.state = RUNNING
try:
result = self.module.main()
if result == "EVENTLOOP":
self.state = EVENTDRIVEN
else:
self.state = DONE
except turtle.Terminator:
if self.root is None:
return
self.state = DONE
result = "stopped!"
if self.state == DONE:
self.configGUI(NORMAL, NORMAL, DISABLED, NORMAL,
result)
elif self.state == EVENTDRIVEN:
self.exitflag = True
self.configGUI(DISABLED, DISABLED, NORMAL, DISABLED,
"use mouse/keys or STOP", "red")
def startDemo(self):
self.refreshCanvas()
self.dirty = True
turtle.TurtleScreen._RUNNING = True
self.configGUI(DISABLED, NORMAL, DISABLED,
"demo running...", "black")
self.screen.clear()
self.screen.mode("standard")
self.state = RUNNING
try:
result = self.module.main()
if result == "EVENTLOOP":
self.state = EVENTDRIVEN
else:
self.state = DONE
except turtle.Terminator:
if self.root is None:
return
self.state = DONE
result = "stopped!"
if self.state == DONE:
self.configGUI(NORMAL, DISABLED, NORMAL,
result)
elif self.state == EVENTDRIVEN:
self.exitflag = True
self.configGUI(DISABLED, NORMAL, DISABLED,
"use mouse/keys or STOP", "red")
def startDemo(self):
self.refreshCanvas()
self.dirty = True
turtle.TurtleScreen._RUNNING = True
self.configGUI(DISABLED, NORMAL, DISABLED,
"demo running...", "black")
self.screen.clear()
self.screen.mode("standard")
self.state = RUNNING
try:
result = self.module.main()
if result == "EVENTLOOP":
self.state = EVENTDRIVEN
else:
self.state = DONE
except turtle.Terminator:
self.state = DONE
result = "stopped!"
if self.state == DONE:
self.configGUI(NORMAL, DISABLED, NORMAL,
result)
elif self.state == EVENTDRIVEN:
self.exitflag = True
self.configGUI(DISABLED, NORMAL, DISABLED,
"use mouse/keys or STOP", "red")
def run(self):
"""Process command queue and enter turtle main loop"""
if self.closed:
raise PlotClosed('Plot window closed')
opened = False
try:
while True:
try:
cmd = self.queue.get(timeout=1)
break
except queue.Empty:
pass
if cmd != self.do_close:
opened = True
self.do_zoom()
self.do_clear()
cmd()
turtle.ontimer(self.check_queue, 100)
turtle.mainloop()
except turtle.Terminator:
pass
except KeyboardInterrupt:
pass
finally:
self.closed = True
if opened:
try:
turtle.bye()
except turtle.Terminator:
pass