Питон выдаёт ошибку в оргументах.

274 просмотраОргументы
0
0 Комментариев

Использую питон 3.7.0, на Windows 7.
Прошёл курс програмирования на питон для начинающих, сделали данное подобие змейки, я решил самостоятельно дороботать код, и сделать экран:Game Over и кнопку Restart. Всё работает, но при нажатии на кнопку Restart выходит ошибка: TypeError: draw_all() takes 0 positional arguments but 1 was given.   Попробовал добавить оргумент \»event\» и питон выдал: TypeError: draw_all() missing 1 required positional argument: \’event\’. Вот код:
def restart():
fra1 = Frame(root, width = 800, height = 100, bg = \’red\’, bd = 20)
but = Button(fra1, text = \»Restart\», width = 10, height = 1, bg = \’red\’, fg = \’gold\’)
but.pack()
fra1.pack()
but.bind(\»<Button-1>\», draw_all)
def draw_element(i, j):
canvas.create_oval((i + 1) * 25, (j + 1) * 25, (i + 2) * 25, (j + 2) * 25, fill = \»gold\»)
def the_end():
if win == False:
canvas.delete(\’all\’)
canvas.create_rectangle(0, 0, (30 + 2) * 25, (20 + 2) * 25, fill = \’red\’)
canvas.create_text(100, 244, text = \»GAME OVER\», font = \»Verdana 60\», anchor = \»w\», justify = CENTER, fill = \»gold\»)
restart()
def draw_snake():
global table_x, table_y
i = 0
while i < len(table_x):
draw_element(table_x[i], table_y[i])
i += 1
def draw_all():
draw_field()
draw_bonus()
draw_snake()
canvas.update()
def draw_field():
canvas.create_rectangle(0, 0, (30 + 2) * 25, (20 + 2) * 25, fill = \’brown\’)
canvas.create_rectangle(25, 25, (30 + 1) * 25, (20 + 1) * 25, fill = \’darkgreen\’)
def draw_bonus():
global xb, yb
canvas.create_oval((xb + 1) * 25, (yb + 1) * 25, (xb + 2) * 25, (yb + 2) * 25, fill = \»red\»)
def left(event):
global vx, vy
vx = -1
vy = 0
def right(event):
global vx, vy
vx = 1
vy = 0
def up(event):
global vx, vy
vx = 0
vy = -1
def down(event):
global vx, vy
vx = 0
vy = 1
from tkinter import *
import time
import random
root = Tk()
canvas = Canvas(root, width = (30 + 2) * 25, height = (20 + 2) * 25)
canvas.pack()
root.bind(\»<Left>\», left)
root.bind(\»<Right>\», right)
root.bind(\»<Up>\», up)
root.bind(\»<Down>\», down)
table_x = [11, 12, 13, 14]
table_y = [3, 3, 3, 3]
xb = 17
yb = 17
win = True
vx = -1
vy = 0
while win:
if (table_x[0] == 0) and (vx == -1):
table_x[0] = 29
if (table_x[0] == 29) and (vx == 1):
table_x[0] = 0
if (table_y[0] == 0) and (vy == -1):
table_y[0] = 19
if (table_y[0] == 19) and (vy == 1):
table_y[0] = 0
table_x = [table_x[0] + vx] + table_x
table_y = [table_y[0] + vy] + table_y
if (table_x[0] != xb) or (table_y[0] != yb):
table_x.pop(-1)
table_y.pop(-1)
else:
xb, yb = random.randint(0, 29), random.randint(0, 19)
i = 1
while i < len(table_x):
if (table_x[0] == table_x[i]) and (table_y[0] == table_y[i]): win = False
i += 1
draw_all()
time.sleep(0.01)
the_end()
root.mainloop()
Помимо данной ошибки при запуске змейка едет с нормальной скоростью, но позже замедляется.
Прошу помочь, заранее спасибо!


Добавить комментарий

1 Ответы

Python Опубликовано 12.12.2018
1

Обработчик кнопки должен принимать  один обязательный аргумент.
Определи функцию так: draw_all(arg=None) или draw_all(*arg).

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up