#python #turtle-graphics
#python #черепаха-графика
Вопрос:
def NewNote(x, y):
print("something")
text = input()
return (text)
def Delete(x, y):
text = GetText()
pen.write(text, align="left", font=("arial", TextSize))
print(text)
**text = BlackSquare.onrelease(NewNote)**
**text = VerLine.onrelease(NewNote)**
**text = HorzLine.onrelease(NewNote)**
color = turtle.onscreenclick(settings)
WhiteeraserSquare.onrelease(Delete)
BlackeraserSquare.onrelease(Delete)
def GetText():
textA = text
return textA
< итак, в основном функция NewNote запускается одним из отмеченных триггеров, принимает входные данные от пользователя, и оттуда я хочу получить эти входные данные для функции удаления. итак, я попытался вернуть ее в триггер, сохранить ее снова как переменную, чем поместить ее в другую функцию, которая отправила бы ее обратно в
удалить функцию, но я явно не понимаю, как работает вся эта штука с возвратом, потому что функция удаления продолжает печатать «none».
(я использую графический модуль Turtle, поэтому .. триггеры и pen.write взяты оттуда).
ps: это мой первый раз, когда я задаю вопрос в stack overflow, поэтому, если я сделал что-то не так, простите меня.
Ответ №1:
Вы неправильно понимаете обработчики событий turtle и вам нужно (повторно) прочитать о них:
def NewNote(x, y):
print("something")
text = input()
return (text)
text = BlackSquare.onrelease(NewNote)
onrelease()
Метод ничего не возвращает (returns None
), поэтому присвоение его результата text
переменной ничего не делает.
Вызывающий объект NewNote()
обработчика событий не заботится о ее возвращаемом значении, поэтому return (text)
в основном игнорируется.
Вот простой пример, который, я надеюсь, поможет вам понять, как используются эти функции. Он выводит две кнопки черепахи, зеленый и красный квадраты. Нажмите на зеленую, и она предложит вам ввести и записать в центре экрана. Нажмите на красную, и она удалит этот текст:
from turtle import Screen, Turtle
def delete_text(x, y):
pen.clear()
def write_text(x, y):
text = screen.textinput("Text Input", "Enter some text")
pen.clear()
pen.write(text, align='center', font=('Arial', 18, 'bold'))
screen = Screen()
write = Turtle()
write.shape('square')
write.color('green')
write.penup()
write.onrelease(write_text)
write.backward(200)
erase = Turtle()
erase.shape('square')
erase.color('red')
erase.penup()
erase.onrelease(delete_text)
erase.forward(200)
pen = Turtle()
pen.hideturtle()
screen.mainloop()
Для передачи информации между write_text()
и delete_text()
требуется какая-то глобальная сущность, через которую можно передавать эту информацию. Это может быть такая же простая, как глобальная переменная, или что-то более сложное, например объект, который передается в качестве дополнительного аргумента обработчикам через lambda
выражение.
Комментарии:
1. спасибо, но причина, по которой я пытался переместить
text
переменную, заключается в том, что я хотел иметь возможность удалять только последний текст, который был написан на экране. и поскольку такой функции не существует, я решил, что если я смогу получитьtext
переменную в функцию удаления, то я смогу снова напечатать ее на экране в тех же координатах, но белым цветом, это будет все равно что удалить ее. но теперь я знаю, что это невозможно без глобальной вещи, в любом случае .. спасибо