from turtle import Turtle, Screen
tim = Turtle()
screen = Screen()
def move_forward():
tim.forward(10)
def move_backward():
tim.backward(10)
def turn_left():
tim.left(10)
def turn_right():
tim.right(10)
def reset_screen():
# teacher method:
tim.clear()
tim.penup()
tim.home()
tim.pendown()
# 亦可使用此函數,只是使用這個會全部恢復預設(ex:箭頭顏色是黑的)
# tim.reset()
# screen.onkey(key='w', fun=move_forward)
# screen.onkey(key='s', fun=move_backward)
# screen.onkey(key='a', fun=turn_left)
# screen.onkey(key='d', fun=turn_right)
# screen.onkey(key='z', fun=reset_screen)
# 與上面的五行結果一致
_dict = {
"w": move_forward,
"s": move_backward,
"a": turn_left,
"d": turn_right,
"z": reset_screen
}
for key, value in _dict.items():
screen.onkey(key=key, fun=value)
screen.listen()
screen.exitonclick()
from turtle import Screen, Turtle
class Draw:
def __init__(self, color):
# 若要設為private variable,在原先變數名稱加上兩條_
# 例如: self.__turtle = Turtle()
self.turtle = Turtle()
self.screen = Screen()
self.turtle.color(color)
self.color = color
# 若要設為private method(before method name add __)
def move_forward(self):
self.turtle.forward(10)
def move_backward(self):
self.turtle.backward(10)
def turn_left(self):
self.turtle.left(10)
def turn_right(self):
self.turtle.right(10)
def reset_screen(self):
# 重置後,顏色會一致(因為是將原先的箭頭位置直接移到初始位)
self.turtle.clear()
self.turtle.penup()
self.turtle.home()
self.turtle.pendown()
# 使用下面方法雖然也會重製但是箭頭會變成預設黑色與當初自己設定的物件顏色不一致
# self.turtle.reset()
# self.turtle.color(self.color)
def draw_screen(self):
self.screen.onkeypress(key='w', fun=self.move_forward)
self.screen.onkeypress(key='s', fun=self.move_backward)
self.screen.onkey(key='a', fun=self.turn_left)
self.screen.onkey(key='d', fun=self.turn_right)
self.screen.onkey(key='z', fun=self.reset_screen)
self.screen.listen()
self.screen.exitonclick()
from method2 import Draw
draw = Draw(color="blue")
draw.draw_screen()
※ 補充: 若是將主程式改成(如下面程式範例),關掉第一個物件的視窗再創建第二個物件時,程式會報錯。
from method2 import Draw
draw = Draw(color="blue")
draw.draw_screen()
draw1 = Draw(color="green")
draw1.draw_screen()
# 可將上面方法改成如下
colors = ['blue', 'green', 'red']
for color in colors:
draw = Draw(color=color)
draw.draw_screen()
錯誤訊息如圖:
解決方法(如下面程式範例 in method2.py):
def __init__(self, color):
try:
self.turtle = Turtle()
self.screen = Screen()
self.turtle.color(color)
self.color = color
except:
self.turtle = Turtle()
self.screen = Screen()
self.color = color
self.turtle.color(color)
turtle窗口显示、隐藏与turtle.Terminator深层探究_★·°立芯;︶︵︶-CSDN博客