Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 节目中说的是“thequot;。“移动”;函数不存在_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 节目中说的是“thequot;。“移动”;函数不存在

Python 节目中说的是“thequot;。“移动”;函数不存在,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我有一些代码,可以在屏幕上用一定的大小、位置和颜色画一个圆圈。这是我第一次尝试用对象做类似的事情,因为我第一次这样做时,我把它全部硬编码了 将tkinter作为tk导入 班长: 定义初始(自身、位置、颜色、大小、速度): self.location=位置 self.color=颜色 self.size=大小 自身速度=速度 玩家=头([375,375],“橙色4”,75,5) def移动(事件、移动器): key=event.keysym 如果键==“右”: window.move(mover,

我有一些代码,可以在屏幕上用一定的大小、位置和颜色画一个圆圈。这是我第一次尝试用对象做类似的事情,因为我第一次这样做时,我把它全部硬编码了

将tkinter作为tk导入
班长:
定义初始(自身、位置、颜色、大小、速度):
self.location=位置
self.color=颜色
self.size=大小
自身速度=速度
玩家=头([375,375],“橙色4”,75,5)
def移动(事件、移动器):
key=event.keysym
如果键==“右”:
window.move(mover,player.speed,0)
elif键==“左”:
移动窗口(移动器,-player.speed,0)
elif键==“向上”:
窗口移动(移动,0,-播放器速度)
elif键==“向下”:
移动窗口(移动器、0、播放器、速度)
window=tk.tk()
窗口标题(“巡演”)
显示=tk.Canvas(窗口,宽度=750,高度=750)
display.pack()
player=display.create_oval((player.location[0]-(player.size/2)),(player.location[1]-(player.size/2)),
(player.location[0]+(player.size/2)),(player.location[1]+(player.size/2)),
fill=player.color)
window.bind_all(“,lambda事件:移动(事件,移动者=玩家))
window.mainloop()
当我运行这段代码时,我得到了错误
AttributeError:“\u tkinter.tkapp”对象没有属性“move”
当我尝试用箭头键移动时。我尝试将
窗口
变量更改为
播放器
显示
变量,但仍然不起作用

根据jasonharper和acw1668的说法,我将代码改为:

import tkinter as tk


class Head:

    def __init__(self, location, color, size, speed):
        self.location = location
        self.color = color
        self.size = size
        self.speed = speed


player = Head([375, 375], "orange4", 75, 5)


def movement(event, mover):
    key = event.keysym
    if key == "Right":
        display.move(mover, player.speed, 0)
    elif key == "Left":
        display.move(mover, -player.speed, 0)
    elif key == "Up":
        display.move(mover, 0, -player.speed)
    elif key == "Down":
        display.move(mover, 0, player.speed)


window = tk.Tk()
window.title("Tour")
display = tk.Canvas(window, width=750, height=750)
display.pack()

drawn_player = display.create_oval((player.location[0] - (player.size / 2)), (player.location[1] - (player.size / 2)),
                             (player.location[0] + (player.size / 2)), (player.location[1] + (player.size / 2)),
                             fill=player.color)
window.bind_all("<Key>", lambda event: movement(event, mover=player))

window.mainloop()

将tkinter作为tk导入
班长:
定义初始(自身、位置、颜色、大小、速度):
self.location=位置
self.color=颜色
self.size=大小
自身速度=速度
玩家=头([375,375],“橙色4”,75,5)
def移动(事件、移动器):
key=event.keysym
如果键==“右”:
display.move(移动,player.speed,0)
elif键==“左”:
display.move(移动器,-player.speed,0)
elif键==“向上”:
显示。移动(移动,0,-玩家。速度)
elif键==“向下”:
显示。移动(移动,0,播放器。速度)
window=tk.tk()
窗口标题(“巡演”)
显示=tk.Canvas(窗口,宽度=750,高度=750)
display.pack()
Drawed_player=display.create_oval((player.location[0]-(player.size/2)),(player.location[1]-(player.size/2)),
(player.location[0]+(player.size/2)),(player.location[1]+(player.size/2)),
fill=player.color)
window.bind_all(“,lambda事件:移动(事件,移动者=玩家))
window.mainloop()

现在,虽然没有错误,但圆不会移动。有什么问题吗?

除了在
movement()
函数中引用画布的问题外,还有两个名为
player
的变量,这将导致新问题。我通过将第二个重命名为
player\u draw
以及对它的所有引用来修复后者

代码现在起作用并移动椭圆

import tkinter as tk


class Head:

    def __init__(self, location, color, size, speed):
        self.location = location
        self.color = color
        self.size = size
        self.speed = speed


player = Head([375, 375], "orange4", 75, 5)


def movement(event, mover):
    key = event.keysym
    if key == "Right":
        display.move(mover, player.speed, 0)
    elif key == "Left":
        display.move(mover, -player.speed, 0)
    elif key == "Up":
        display.move(mover, 0, -player.speed)
    elif key == "Down":
        display.move(mover, 0, player.speed)

window = tk.Tk()
window.title("Tour")
display = tk.Canvas(window, width=750, height=750)
display.pack()

drawn_player = display.create_oval((player.location[0] - (player.size / 2)),
                                   (player.location[1] - (player.size / 2)),
                                   (player.location[0] + (player.size / 2)),
                                   (player.location[1] + (player.size / 2)),
                                   fill=player.color)
window.bind_all("<Key>", lambda event: movement(event, mover=drawn_player))

window.mainloop()
将tkinter作为tk导入
班长:
定义初始(自身、位置、颜色、大小、速度):
self.location=位置
self.color=颜色
self.size=大小
自身速度=速度
玩家=头([375,375],“橙色4”,75,5)
def移动(事件、移动器):
key=event.keysym
如果键==“右”:
display.move(移动,player.speed,0)
elif键==“左”:
display.move(移动器,-player.speed,0)
elif键==“向上”:
显示。移动(移动,0,-玩家。速度)
elif键==“向下”:
显示。移动(移动,0,播放器。速度)
window=tk.tk()
窗口标题(“巡演”)
显示=tk.Canvas(窗口,宽度=750,高度=750)
display.pack()
Drawed_player=display.create_oval((player.location[0]-(player.size/2)),
(player.location[1]-(player.size/2)),
(player.location[0]+(player.size/2)),
(player.location[1]+(player.size/2)),
fill=player.color)
window.bind_all(“,lambda事件:移动(事件,移动者=draw_播放器))
window.mainloop()

应该是
display.move(…)
而不是
window.move(…)
@acw1668我试过了,但仍然不起作用。而
player=display.create_oval(…)
将覆盖
player=Head(…)
。你需要在画布上调用
.move()
,而不是在窗口上。我怀疑当你尝试它时,它不起作用的原因是你试图用名称
player
引用两个完全不同的东西-当你实际尝试移动某个东西时,它的作用不再具有
speed
属性。
mover=player
应该是
mover=draw\u player