事件绑定箭头键python Tkinter

事件绑定箭头键python Tkinter,python,binding,event-handling,tkinter,keyboard-events,Python,Binding,Event Handling,Tkinter,Keyboard Events,我正在尝试用tkinter制作一个简单的游戏,我需要将左/右箭头键绑定到一个类方法。该方法还接受一个参数。我已经完成了绑定,但是当我单击箭头键时,没有任何移动。我尝试向该方法添加一个print语句,当我单击这些键时,什么也不会打印,因此该方法不会被调用。我认为绑定不起作用,但我不知道如何修复它 另外,如果用户持有绑定密钥,是否有办法保持运行绑定方法?比如单击并按住左键,让方法反复运行,直到用户放开为止 谢谢 from Tkinter import * from math import *

我正在尝试用tkinter制作一个简单的游戏,我需要将左/右箭头键绑定到一个类方法。该方法还接受一个参数。我已经完成了绑定,但是当我单击箭头键时,没有任何移动。我尝试向该方法添加一个print语句,当我单击这些键时,什么也不会打印,因此该方法不会被调用。我认为绑定不起作用,但我不知道如何修复它

另外,如果用户持有绑定密钥,是否有办法保持运行绑定方法?比如单击并按住左键,让方法反复运行,直到用户放开为止

谢谢

from Tkinter import *
    from math import *
    global radius
    radius=175
    root=Tk()
    c=Canvas(root,width=600,height=600)
    c.pack()
    c.configure(scrollregion=(-300, -300, 300, 300))
    c.create_oval((-40,-40,40,40),fill="Yellow",outline="Yellow")
    def findcoords(angle,radius):
            #cos,sin
            a=cos(radians(angle))
            b=sin(radians(angle))
            return ((a*radius),(b*radius),(a*radius),(b*radius))

    def createOutline(radius):
        t=0
        while t<=360:
            c.create_rectangle(findcoords(t,radius))
            t+=.01
    class World():
        def __init__(self,canvas,img=None,size=20,angle=90):
            self.size=size
            self.angle=angle
            self.position=self.findcoord()
            self.canvas=canvas
            if img!=None:
                self.img=img
                self.current=c.create_image(self.position,image=self.img)
            else:
                self.current=c.create_oval(self.position,fill="Blue",outline="Blue")
            c.bind('<Left>',lambda event,arg=.1:self.move(event,arg))
            c.bind('<Right>',lambda event,arg=-.1:self.move(event,arg))
        def findcoord(self):
            #cos,sin
            a=cos(radians(self.angle))
            b=sin(radians(self.angle))
            return (((a*radius)-self.size),((b*radius)-self.size),((a*radius)+self.size),((b*radius)+self.size))           
        def move(self,n):
            self.angle+=.1
            self.position=self.findcoord()
            self.canvas.coords(self.current,self.position)

    createOutline(175)
    a=World(c)



    root.mainloop()
从Tkinter导入*
从数学导入*
全局半径
半径=175
root=Tk()
c=画布(根,宽度=600,高度=600)
c、 包()
c、 配置(滚动区域=(-300,-300300300))
c、 创建椭圆(-40,-40,40,40),fill=“Yellow”,outline=“Yellow”)
def findcoords(角度、半径):
#因为,罪恶
a=cos(弧度(角度))
b=sin(弧度(角度))
返回((a*半径),(b*半径),(a*半径),(b*半径))
def createOutline(半径):
t=0

当t时,尝试使用以下方法设置焦点:

c.focus_set()
您还可以将密钥绑定到根目录,以便

root.bind('<Left>',lambda event,arg=.1:self.move(event,arg))
root.bind('<Right>',lambda event,arg=-.1:self.move(event,arg))
root.bind(“”,lambda事件,arg=.1:self.move(事件,arg))
root.bind(“”,lambda事件,arg=-.1:self.move(事件,arg))
看起来你没有聚焦在画面上,所以键盘按键没有被发送到正确的画面上

只要保持,您就可以让事件继续,直到释放密钥。释放键的格式如下所示:

c.bind("<KeyRelease-left>", onkeyrelease_of_key)
c.bind(“,onkeyrelease\u of\u key)

用事件替换按键的onkeyrelease。\p>尝试使用以下方法设置焦点:

c.focus_set()
您还可以将密钥绑定到根目录,以便

root.bind('<Left>',lambda event,arg=.1:self.move(event,arg))
root.bind('<Right>',lambda event,arg=-.1:self.move(event,arg))
root.bind(“”,lambda事件,arg=.1:self.move(事件,arg))
root.bind(“”,lambda事件,arg=-.1:self.move(事件,arg))
看起来你没有聚焦在画面上,所以键盘按键没有被发送到正确的画面上

只要保持,您就可以让事件继续,直到释放密钥。释放键的格式如下所示:

c.bind("<KeyRelease-left>", onkeyrelease_of_key)
c.bind(“,onkeyrelease\u of\u key)

用事件替换按键的onkeyrelease。\p>尝试使用以下方法设置焦点:

c.focus_set()
您还可以将密钥绑定到根目录,以便

root.bind('<Left>',lambda event,arg=.1:self.move(event,arg))
root.bind('<Right>',lambda event,arg=-.1:self.move(event,arg))
root.bind(“”,lambda事件,arg=.1:self.move(事件,arg))
root.bind(“”,lambda事件,arg=-.1:self.move(事件,arg))
看起来你没有聚焦在画面上,所以键盘按键没有被发送到正确的画面上

只要保持,您就可以让事件继续,直到释放密钥。释放键的格式如下所示:

c.bind("<KeyRelease-left>", onkeyrelease_of_key)
c.bind(“,onkeyrelease\u of\u key)

用事件替换按键的onkeyrelease。\p>尝试使用以下方法设置焦点:

c.focus_set()
您还可以将密钥绑定到根目录,以便

root.bind('<Left>',lambda event,arg=.1:self.move(event,arg))
root.bind('<Right>',lambda event,arg=-.1:self.move(event,arg))
root.bind(“”,lambda事件,arg=.1:self.move(事件,arg))
root.bind(“”,lambda事件,arg=-.1:self.move(事件,arg))
看起来你没有聚焦在画面上,所以键盘按键没有被发送到正确的画面上

只要保持,您就可以让事件继续,直到释放密钥。释放键的格式如下所示:

c.bind("<KeyRelease-left>", onkeyrelease_of_key)
c.bind(“,onkeyrelease\u of\u key)

将onkeyrease\u替换为事件。

为类函数舍弃lambda。而不是

lambda event,arg=.1:self.move(event,arg)

lambda event,arg=-.1:self.move(event,arg))

分别。确保使用事件参数编写相应的类函数


我也不太明白你的代码。在
move()
(class World的方法)中,您设置了参数
n
,但从未使用过它。试着清理一下代码,或者添加注释来解释您到底在做什么。

对于类函数,不要使用lambda。而不是

lambda event,arg=.1:self.move(event,arg)

lambda event,arg=-.1:self.move(event,arg))

分别。确保使用事件参数编写相应的类函数


我也不太明白你的代码。在
move()
(class World的方法)中,您设置了参数
n
,但从未使用过它。试着清理一下代码,或者添加注释来解释您到底在做什么。

对于类函数,不要使用lambda。而不是

lambda event,arg=.1:self.move(event,arg)

lambda event,arg=-.1:self.move(event,arg))

分别。确保使用事件参数编写相应的类函数


我也不太明白你的代码。在
move()
(class World的方法)中,您设置了参数
n
,但从未使用过它。试着清理一下代码,或者添加注释来解释您到底在做什么。

对于类函数,不要使用lambda。而不是

lambda event,arg=.1:self.move(event,arg)

lambda event,arg=-.1:self.move(event,arg))

分别。确保使用事件参数编写相应的类函数

我也不太明白你的代码。在
move()
(class World的方法)中,您设置了参数
n
,但从未使用过它。试着清理一下你的代码,或者添加注释来解释你到底在做什么