bind()方法位置错误错误问题

时间:2018-11-07 09:52:30

标签: 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.get(), username.get(), pas.get()),
                       MakeQuestion.qcurrent_user(username.get()), ExaminPaper.ecurrent_user(username.get()) )

这些显示绑定了您给5的1至4个位置指令。。为什么会这样?

1 个答案:

答案 0 :(得分:1)

您似乎认为您的所有函数调用都是lambda的一部分,而实际上并不是。当前,只有controller.showframe(Moderator),是。如果您想从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())] )

但是,将多个函数放入一个lambda调用中会使代码很难理解和调试。创建一个额外的功能绑定到按钮并从那里调用您的额外功能可能会更好。由于tkinter Button具有bind选项,因此您实际上也不需要使用command

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')