возможно ли получить переменную из функции в другую функцию, если первая не запускается второй?

#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 переменную в функцию удаления, то я смогу снова напечатать ее на экране в тех же координатах, но белым цветом, это будет все равно что удалить ее. но теперь я знаю, что это невозможно без глобальной вещи, в любом случае .. спасибо