Вам не нужна глобальная переменная для отслеживания размера пера. Черепахи уже (эффективно) являются глобальными объектами и знают свой собственный размер пера (проверенный код):
def h7():
pensize = tess.pensize() - 1
if pensize >= 0:
tess.pensize(pensize)
def h8():
pensize = tess.pensize() + 1
if pensize <= 20:
tess.pensize(pensize)
Однако есть еще одна проблема, которая помешает этому или любому другому решению работать правильно. Этот код:
wn.onkey(h7, "-")
wn.onkey(h8, "+")
Должно быть вместо:
wn.onkey(h7, "minus")
wn.onkey(h8, "plus")
В противном случае символ "-"
приведет к тому, что все неназначенные клавиши (включая клавишу Shift, необходимую для ввода "+"
) будут вызывать обработчик h7()
! Это изменение также должно позволить эквивалентным клавишам на клавиатуре работать. Полный код:
from turtle import Screen, Turtle
wn = Screen() # Get a reference to the window
wn.setup(400, 500) # Determine the window size
wn.title("Handling keypresses!") # Change the window title
wn.bgcolor("lightgreen") # Set the background color
tess = Turtle() # Create our favorite turtle
# The next nine functions are our "event handlers".
def h1():
tess.forward(30)
def h2():
tess.left(45)
def h3():
tess.right(45)
def h4():
tess.color("red")
def h5():
tess.color("green")
def h6():
tess.color("blue")
def h7():
pensize = tess.pensize() - 1
if pensize >= 0:
tess.pensize(pensize)
def h8():
pensize = tess.pensize() + 1
if pensize <= 20:
tess.pensize(pensize)
def h9():
tess.backward(30)
# These lines "wire up" keypresses to the handlers we've defined.
wn.onkey(h1, "Up")
wn.onkey(h2, "Left")
wn.onkey(h3, "Right")
wn.onkey(h4, "r")
wn.onkey(h5, "g")
wn.onkey(h6, "b")
wn.onkey(h7, "minus")
wn.onkey(h8, "plus")
wn.onkey(h9, "Down")
wn.onkey(wn.bye, "q") # Close down the turtle window
# Now we need to tell the window to start listening for events,
# If any of the keys that we're monitoring is pressed, its
# handler will be called.
wn.listen()
wn.mainloop()