Python 3.x bind()方法位置错误问题
在我的项目中,我添加了一个带有按钮的bind方法Python 3.x bind()方法位置错误问题,python-3.x,tkinter,bind,Python 3.x,Tkinter,Bind,在我的项目中,我添加了一个带有按钮的bind方法 subbutton = Button(self, text='Submit', width=10) subbutton.grid(row=10, column=0, sticky='w') subbutton.bind('<Button-1>', lambda e: controller.showframe(Moderator), teacher_input(name.get(), idd
subbutton = Button(self, text='Submit', width=10)
subbutton.grid(row=10, column=0, sticky='w')
subbutton.bind('<Button-1>', lambda e: controller.showframe(Moderator),
teacher_input(name.get(), idd.get(), username.get(), pas.get()),
MakeQuestion.qcurrent_user(username.get()), ExaminPaper.ecurrent_user(username.get()) )
subbutton=按钮(self,text='Submit',宽度=10)
subbutton.grid(行=10,列=0,sticky='w')
子按钮绑定(“”,lambda e:controller.showframe(版主),
教师输入(name.get()、idd.get()、username.get()、pas.get()),
MakeQuestion.qcurrent\u用户(username.get()),testpaper.ecurrent\u用户(username.get())
这些显示有1到4个位置预兆,你给了5个。为什么会发生这种情况?您似乎认为所有函数调用都是
lambda的一部分,而它们不是。目前,只有controller.showframe(主持人),
是可用的。如果要从lambda
运行多个函数,请将它们放入如下列表中:
subbutton.bind('<Button-1>', lambda e: [controller.showframe(Moderator),
teacher_input(name.get(), idd.get(), username.get(), pas.get()),
MakeQuestion.qcurrent_user(username.get()),
ExaminPaper.ecurrent_user(username.get())] )
谢谢,这很有效。这里使用lamda给出了事件变量“e”。如果我用MakeQuestion.qcurrent\u user(e,username.get())
?我没有在函数参数中为此添加额外的变量。它停止了一个警告。这个“e”的作用是什么?e
是通过bind
函数传递的。您的lambda
必须接受它,但是如果您的MakeQuestion.qcurrent\u user
函数不需要它,您不应该传递它。谢谢。但它显示用户未填充的警告。代码的工作原理是一样的。最好不要使用lambda,而是创建一个新函数。@BryanOakley非常正确,我想我应该解决这个问题。我现在只关注导致错误的原因。为什么要以这种方式使用lambda?如果您为按钮创建了适当的函数,那么您的代码将更容易调试。你这样做有什么原因吗?
def buttonClick():
controller.showframe(Moderator)
teacher_input(name.get(), idd.get(), username.get(), pas.get())
MakeQuestion.qcurrent_user(username.get())
ExaminPaper.ecurrent_user(username.get())
subbutton = Button(self, text='Submit', width=10, command=buttonClick)
subbutton.grid(row=10, column=0, sticky='w')