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
。