Ограничить минимальный / максимальный размер () в черепахе - PullRequest
0 голосов
/ 02 июля 2019

Размер пера остается тем же размером, когда я нажимаю клавиши - и +, как я рисую черепахой.

Я переработал проблему, используя некоторые правдоподобные ответы, но безрезультатно. Я искал в интернете подобное решение и пришел с пустыми руками.

import turtle

turtle.setup(400,500)                # Determine the window size
wn = turtle.Screen()                 # Get a reference to the window
wn.title("Handling keypresses!")     # Change the window title
wn.bgcolor("lightgreen")             # Set the background color
tess = turtle.Turtle()               # Create our favorite turtle

# The next four 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():
    tess.pensize(0)

def h8():
    tess.pensize(20)

def h9():
    wn.bye()                        # Close down the turtle window

def h10():
    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, "-")
wn.onkey(h8, "+")
wn.onkey(h9, "q")
wn.onkey(h10, "Down")

# 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()

Я пытаюсь использовать метод .pensize () в черепахе, чтобы увеличить / уменьшить ее толщину в ограниченном диапазоне от 0 до 20, используя клавиши - и + по функции с методом .onkey (). Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Вам не нужна глобальная переменная для отслеживания размера пера. Черепахи уже (эффективно) являются глобальными объектами и знают свой собственный размер пера (проверенный код):

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()
0 голосов
/ 02 июля 2019

Если предположить, что h7() и h8() работают, не меняя большую часть кода, вы можете попробовать использовать глобальную переменную (непроверенный код)

pensize = 0

def h7():
    global pensize
    pensize = max(0, pensize-1)
    tess.pensize(pensize)

def h8():
    global pensize
    pensize = min(20, pensize+1)
    tess.pensize(pensize)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...