python tkinter self.master.bind()调用函数时没有事件
我对tkinter self.master.bind有问题。当我运行下面的程序时,它会自动调用bind!我有self.master.bind(“”,self.moveleft),它就是不工作!它自动运行。我已经在一条评论中列出了错误的位置,上面写着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 _
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”。