python tkinter self.master.bind()调用函数时没有事件

python tkinter self.master.bind()调用函数时没有事件,python,tkinter,Python,Tkinter,我对tkinter self.master.bind有问题。当我运行下面的程序时,它会自动调用bind!我有self.master.bind(“”,self.moveleft),它就是不工作!它自动运行。我已经在一条评论中列出了错误的位置,上面写着error HERE\uuuu init\uuuu工作正常,self.master工作正常,只是绑定,这是唯一的事情 from tkinter import * import time class game_Win_Start: def _

我对tkinter self.master.bind有问题。当我运行下面的程序时,它会自动调用bind!我有self.master.bind(“”,self.moveleft),它就是不工作!它自动运行。我已经在一条评论中列出了错误的位置,上面写着
error HERE
\uuuu init\uuuu
工作正常,
self.master
工作正常,只是绑定,这是唯一的事情

from tkinter import *
import time

class game_Win_Start:

    def __init__(self, root):
        self.master = root
        self.master.title('Awesome game')
        self.canvas()

    def canvas(self):
        global c
        c = Canvas(self.master, width=root.winfo_screenwidth(),
                   height=root.winfo_screenheight(), bg='black')
        c.pack()
        self.ButtonLabel()

    def ButtonLabel(self):
        global title
        title = Label(self.master, font=('arial', 50, 'bold'),
                  text='A Game', fg='orange')
        title.place(x=750, y=75)
        self.BtnStart()

    def BtnStart(self):
        global BtnStart
        BtnStart = Button(self.master, font=('arial', 45, 'bold'),
                      text='start', relief=RAISED, padx=25,
                      pady=25, bd=8, command=self.MenuDestroy)
        BtnStart.place(x=750, y=700)

    def MenuDestroy(self):
        BtnStart.place(x=2000, y=0)
        title.place(x=2000, y=0)
        GameScreen()

class gameScreen:

    def __init__(self, root):
        self.master = root
        self.drawBg()

    def drawBg(self):
        full = root.winfo_screenwidth()
        middle = full/2
        global third
        third = full/3
        third2 = third*2
        global sixth
        sixth = third/2
        c.create_line(third,0,third,1000,fill='blue')
        c.create_line(third2,0,third2,1000,fill='blue')
        c.create_rectangle(0,0,50,1000,fill='blue')
        c.create_rectangle(full,0,full-50,1000,fill='blue')
        self.spriteMe()

    def spriteMe(self):
        global sprite
        sprite = c.create_oval(0,0,50,50,fill='peru')
        c.move(sprite,sixth*3,850)
        self.master.update()
        Controls()



def GameScreen():
    gameScreen(root)

class controls:

    def __init__(self, root):
        self.master = root
        self.keyBind()

    def moveleft(self, *args):
        c.move(sprite,-608,0)
        self.master.update()
        c.update()
        time.sleep(1)
    def moveright(self, *args):
        c.move(sprite,608,0)
        self.master.update()
        c.update()
        time.sleep(1)
    def keyBind(self):                           # ERROR HERE!!!!!
        self.master.bind('left', self.moveleft())
        self.master.bind('right', self.moveright())



def Controls():
    while True:
    controls(root)


root = Tk()
game_Win_Start(root)
root.mainloop()

首先,将某个东西声明为
foo.bind(“”,bar())
将立即调用函数
bar()
,并将回调值设置为
bar()
的返回值。例如,如果我将
bar()
设置为以下值

def bar(*args):
    return print(True)
…然后回调将等于
print(True)
。如果没有返回任何内容,那么程序只需运行函数并返回
None
,这意味着回调基本上是无用的(除非这是您出于未知原因想要的)


其次,
“left”
不是tkinter中的事件<代码>“”
不过是。括号和大写不是可选的。即使正确设置回调,也不会触发回调,因为事件
'left'
不存在,也不会引发。

您应该能够从
键绑定下的
moveleft
moveright
中删除括号,并且不会再自动调用它。请记住,命令必须是函数,而不是函数的返回值。

我听说过使用
,但这对我来说从来都不起作用!它给了我一个错误。顺便说一下,我使用的是python 3.5.3。这是因为没有名为
的事件,它是
。大写字母“L”不是可选的,它必须有大写字母“L”。