Python 当我运行程序时,如何开始上课?

Python 当我运行程序时,如何开始上课?,python,tkinter,Python,Tkinter,我想用一个正方形来创建一个小游戏。当我运行程序时,有人知道如何开始上课吗 这是一节课 class Player: def __init__(self, event): self.player = self.canvas.create_rectangle(240, 240, 260, 260, fill="blue", outline="dark blue") canvasx = canvas.winfo_width() c

我想用一个正方形来创建一个小游戏。当我运行程序时,有人知道如何开始上课吗

这是一节课

class Player:
    def __init__(self, event):
        self.player = self.canvas.create_rectangle(240, 240, 260, 260, 
        fill="blue", outline="dark blue")
        canvasx = canvas.winfo_width()
        canvasy = canvas.winfo_height()
        canvas.bind_all("<KeyPress-Up>", move)
        canvas.bind_all("<KeyPress-w>", move)
        canvas.bind_all("<KeyPress-Down>", move)
        canvas.bind_all("<KeyPress-s>", move)
        canvas.bind_all("<KeyPress-Right>", move)
        canvas.bind_all("<KeyPress-d>", move)
        canvas.bind_all("<KeyPress-Left>", move)
        canvas.bind_all("<KeyPress-a>", move)
    def move(event):
        if event.keysym == "Up" or event.keysym == "w":
            canvas.move(1, 0, -5)
        elif event.keysym == "Down" or event.keysym == "s":
            canvas.move(1, 0, 5)
        elif event.keysym == "Right" or event.keysym == "d":
            canvas.move(1, 5, 0)
        else:
            canvas.move(1, -5, 0)

canvas = Canvas(tk, width=500, height=500, bg="silver")
canvas.pack()
这:

不是创建类实例的方式。当您放置
Player.\uuuu init\uuuu
时,实际上并不是在调用构造函数。你基本上只是说它存在。与
播放器相同。移动
。您必须实际调用该方法。将这两行替换为:

playerOne = Player(canvas)
playerOne.move()
def move(event=None):
    if event == None:
        return
    if event.keysym == "Up" or event.keysym == "w":
        canvas.move(1, 0, -5)
    elif event.keysym == "Down" or event.keysym == "s":
        canvas.move(1, 0, 5)
    elif event.keysym == "Right" or event.keysym == "d":
        canvas.move(1, 5, 0)
    else:
        canvas.move(1, -5, 0)
现在,
playerOne
Player
类的一个实例

除此之外,
Player
构造函数中还有一个问题

def __init__(self, event):
    self.player = self.canvas.create_rectangle(240, 240, 260, 260, 
    fill="blue", outline="dark blue")
引用
self.canvas
时,没有
self.canvas
。您必须先分配它,然后才能使用它。而且你似乎没有在任何地方使用self.player。我不确定你到底想干什么,但试试这样:

def __init__(self, canvas):
    self.canvas = canvas.create_rectangle(240, 240, 260, 260, 
    fill="blue", outline="dark blue")
然后将
move
方法定义替换为:

playerOne = Player(canvas)
playerOne.move()
def move(event=None):
    if event == None:
        return
    if event.keysym == "Up" or event.keysym == "w":
        canvas.move(1, 0, -5)
    elif event.keysym == "Down" or event.keysym == "s":
        canvas.move(1, 0, 5)
    elif event.keysym == "Right" or event.keysym == "d":
        canvas.move(1, 5, 0)
    else:
        canvas.move(1, -5, 0)

在你的
Player
类之外定义。

发布你的完整代码。只有imports和tkinter basics选项缺少
Player。\uuuuu init\uuuuu
不调用函数本身,也不直接调用
\uuu init\uuu
创建
Player
实例的正确方法。在尝试编写自己的类之前,请阅读一本关于Python中OOP的好书。如果您搜索短语“Pygame对象移动”,您将找到比我们在这里的答案更好的资源来解释它。我希望你想要的是一个“精灵”。一个
不是一个可以“启动”的可执行实体:它是一个数据和方法的容器,这些数据和方法共同封装了一个编程概念。您可以调用一个类方法。。。但你需要一个可独立移动的图标。通过更多游戏动画教程学习必要的概念。你有基本的结构;我希望你能很快完成。文件“C:\Users\vitoa\Desktop\tkinter.py”,第12行,在init self.player=self.canvas中。创建矩形(240,240,260,260,fill=“blue”,outline=“深蓝”)AttributeError:“player”对象没有属性“canvas”,你试过运行它吗?