【问题标题】:I'm working on a game using tkinter. Go a stupid error我正在使用 tkinter 开发游戏。犯一个愚蠢的错误
【发布时间】: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


【解决方案1】:

我认为你混淆了BallPaddle 的构造函数。应该是这样的。

class Ball:
    def __init__(self, canvas, paddle, color):
        self.canvas = canvas
        self.paddle = paddle
        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()

还有

class Paddle:
    def __init__(self, canvas, color):
        self.canvas = canvas
        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)

现在这将起作用

paddle = Paddle(canvas, 'blue')
ball = Ball(canvas, paddle, 'red') 

【讨论】:

  • 谢谢老兄。不,真的,你浪费时间只是为了帮助我。非常感谢您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多