У меня есть инструкция after в функции move_r. Но когда я ударил пробел он говоритПочему это после утверждения не работает?
TypeError: move_r() missing 1 required positional argument: 'event'
Я относительно знаю, что это значит, но я не могу понять, что изменить мою программу предполагается сделать ракету, а затем, когда вы щелкаете пространство ракета движется вверх , К сожалению, моя программа только увеличивается до 100 каждый раз, когда я нажимаю пробел, а не поднимаюсь сама по себе, когда это место попадает в цель. Мой код:
from tkinter import *
import random, time
tk = Tk()
tk.wm_attributes('-topmost', 1)
canvas = Canvas(tk, width=1000, height=1000, bd=0)
canvas.pack()
def rocket(): #draws rocket
rocketbase=canvas.create_rectangle(x2+50, y2-50, x3-50, y3-90, fill ='blue')
rrocketfin=canvas.create_rectangle(x2+60, y2-50, x3-40, y3-20, fill ='#e69100')
lrocketfin=canvas.create_rectangle(x2+40, y2-50, x3-60, y3-20, fill ='#e69100')
mrocketfin=canvas.create_rectangle(x2+54, y2-50, x3-53, y3-20, fill ='#e69100')
lrockethead=canvas.create_rectangle(x2+45, y2-125, x3-60, y3-70, fill ='#e69100')
rrockethead=canvas.create_rectangle(x2+60, y2-125, x3-45, y3-70, fill ='#e69100')
def move_r(event):
if event.keysym == 'space':
global y2
global y3
y2-=100
y3-=100
canvas.after(100, move_r)
x2=460
y2=940
x3=570
y3=900
r1=None
tk.bind('<KeyPress-space>', move_r)
while True:
background = canvas.create_rectangle(0, 0, 1000, 1000, fill = 'red')
base=canvas.create_rectangle(0, 1000, 1000, 900, fill='#86592d')
rocket()
tk.update()
tk.mainloop()
Вы вызываете 'after' правильно, но ваша функция' move_r' требует аргумента, который вы не включаете в вызов 'after', если это имеет смысл. – Leb
На самом деле вы не могли бы объяснить – Maximus
Недостатки обратного вызова в сторону, что ракета никогда не сдвинется, если вы не активируете ее положение - вы должны избавиться от этого цикла! (кто-то сказал вам в своем последнем вопросе 2 часа назад) –