Как я могу повторить функцию def в Canvas?

#python #function #canvas #repeat #tkinter-canvas

Вопрос:

Я хочу, чтобы эта функция защиты повторилась, как только мяч коснется земли (граница окна). Я попытался использовать if, для цикла и while:, но мне не удалось заставить его работать. Я новичок, так что, может быть, я просто совершаю глупые ошибки. Спасибо за помощь.

 import tkinter
canvas = tkinter.Canvas(width=600, height=600)
canvas.pack()

def ball():
    canvas.delete('all')
    global y
    canvas.create_oval(x - 5,y - 5,x   5,y   5, fill = 'red')
    y = y   2
    if y < 600:
        canvas.after(2, ball)
y = 0
x=300
ball()
 

TL;DR: Я хочу повторить функцию def в Python после определенного события.

Комментарии:

1. Ваша ball() функция, похоже, уже повторяется, но, похоже, она также перестает повторяться после oval того, как доходит до конца. Вы хотели, чтобы в то время это было что-то другое?

2. Я хочу, чтобы функция ball() повторилась, как только мяч опустится на дно, но я просто не могу ее повторить.

Ответ №1:

Похоже, вы просто хотите сбросить y значение:

 import tkinter
canvas = tkinter.Canvas(width=600, height=600)
canvas.pack()

def ball():
    canvas.delete('all')
    global y
    canvas.create_oval(x - 5,y - 5,x   5,y   5, fill = 'red')
    y = y   2
    if y >= 600:
        y = 0   # Restart y from 0 again
    canvas.after(2, ball)
y = 0
x=300
ball()
 

Ответ №2:

Я реализую ситуацию с python, чтобы показать вам, как вы можете использовать while цикл, а также использовать return ваши функции для выхода из цикла после какого-либо события. Это просто пример для лучшего понимания ответа. И не используйте глобальные переменные в своем коде. Это просто для примера.

 a = 100

def count_down():
  global a
  a -= 1
  if a > 0:
    return True
  return False


in_the_loop = True

while(in_the_loop):
  in_the_loop = count_down()
  print(a)
 

Возможно, этот фрагмент даст некоторое представление о вашем случае, как выйти из base функции, просто добавив return к этому.