【发布时间】:2020-06-24 02:45:39
【问题描述】:
from tkinter import *
import random
import time
tk = Tk()
tk.title("Game")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
tk.update()
class Ball:
def __init__(self, canvas, color):
self.canvas = canvas
self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
self.canvas.move(self.id, 245, 100)
starts = [-3, -2, -1, 1, 2, 3]
random.shuffle(starts)
self.x = starts[0]
self.y = -3
self.canvas_height = self.canvas.winfo_height()
self.canvas_width = self.canvas.winfo_width()
def hit_paddle(self, pos):
paddle_pos = self.canvas.coords(self.paddle.id)
if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
return True
return False
def draw(self):
self.canvas.move(self.id, self.x, self.y)
pos = self.canvas.coords(self.id)
if pos[1] <= 0:
self.y = 3
if pos[3] >= self.canvas_height:
self.y = -3
if self.hit_paddle(pos) == True:
self.y = -3
if pos[0] <= 0:
self.x = 3
if pos[2] >= self.canvas_width:
self.x = -3
class Paddle:
def __init__(self, canvas, paddle, color):
self.canvas = canvas
self.paddle = paddle
self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)
self.canvas.move(self.id, 200, 300)
self.x = 0
self.canvas_width = self.canvas.winfo_width()
self.canvas.bind_all('<KeyPress-Left>', self.turn_left)
self.canvas.bind_all('<KeyPress-Right>', self.turn_right)
def draw(self):
self.canvas.move(self.id, self.x, 0)
pos = self.canvas.coords(self.id)
if pos[1] <= 0:
self.x = 0
elif pos[2] >= self.canvas_width:
self.x = 0
def turn_left(self, evt):
self.x = -2
def turn_right(self, evt):
self.x = +2
paddle = Paddle(canvas, 'blue') - line 70 is here
ball = Ball(canvas, paddle, 'red')
while 1:
ball.draw()
paddle.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.015)
我收到如下所示的错误:
第 70 行,在 paddle = Paddle(canvas, 'blue') 类型错误: init() 缺少 1 个必需的位置参数:'color'
我试图修复我的 Paddle 类代码,但它看起来对我来说很好。 即使我在那里有一个颜色参数,它仍然给我一个错误
【问题讨论】:
-
def __init__(self, canvas, paddle, color):你的 Paddle 类需要 3 个参数。 -
但在那之后我又得到一个错误:
-
文件 "C:\Users\\Documents\What I made with Python\Working on\MyBookGame.py",第 48 行,在 init self.paddle = paddle NameError : 名称“桨”未定义
-
看来
paddle这个参数是不必要的,从构造函数中取出来就好了。 -
是的,但是在我删除它之后它仍然会要求我打电话给它。所以我得到一个错误:第 70 行,在
ball = Ball(canvas, paddle, 'red') TypeError: __init__() 需要 3 个位置参数,但给出了 4 个
标签: python-3.x tkinter typeerror python-3.7 tkinter-canvas