【问题标题】:Binding a function to a key is not working将功能绑定到键不起作用
【发布时间】:2017-01-25 10:00:46
【问题描述】:

我的代码:

import tkinter

master = tkinter.Tk()
master.title("test1")
master.geometry("300x300")

masterFrame = tkinter.Frame(master)

masterFrame.pack(fill=tkinter.X)

checkboxArea = tkinter.Frame(masterFrame, height=26)

checkboxArea.pack(fill=tkinter.X)

inputStuff = tkinter.Frame(masterFrame)

checkboxList = []

def drawCheckbox():
    checkboxList.append(entry.get())
    entry.delete(0,tkinter.END)
    checkboxRow = tkinter.Frame(checkboxArea)
    checkboxRow.pack(fill=tkinter.X)
    checkbox1 = tkinter.Checkbutton(checkboxRow, text = checkboxList[-1])
    checkbox1.pack(side=tkinter.LEFT)
    deleteItem = tkinter.Button(checkboxRow, text = "x", command=checkboxRow.destroy, bg="red", fg="white", activebackground="white", activeforeground="red")
    deleteItem.pack(side=tkinter.RIGHT)

def bindToEnter():
    master.bind('<Return>', drawCheckbox)

def createInputStuff():
    paddingFrame = tkinter.Frame(inputStuff, height=5)
    paddingFrame.pack(fill=tkinter.X)
    buttonDone.pack()
    inputStuff.pack()
    buttonAdd.pack_forget()
    bindToEnter()

def removeInputStuff():
    inputStuff.pack_forget()
    buttonAdd.pack()
    buttonDone.remove()

buttonDone = tkinter.Button(inputStuff, text = "Close Input", command=removeInputStuff)


buttonAdd = tkinter.Button(masterFrame, text="Add Item", command=createInputStuff)
buttonAdd.pack()


topInput = tkinter.Frame(inputStuff)
bottomInput = tkinter.Frame(inputStuff)

topInput.pack()
bottomInput.pack()

prompt = tkinter.Label(topInput, text="What do you want your checkbox to be for?")
prompt.pack()
entry = tkinter.Entry(bottomInput, bd=3)
entry.pack(side=tkinter.LEFT)
buttonConfirm = tkinter.Button(bottomInput, text="Confirm", command=drawCheckbox)
buttonConfirm.pack(side=tkinter.LEFT)

master.mainloop()

这个想法是让按下 Return/Enter 做与点击“确认”按钮相同的事情,运行 drawCheckbox。这仍在进行中,当运行 removeInputStuff 时,我将解除 drawCheckbox 函数与 Enter 键的绑定。尽管如此,我仍然不明白为什么按 Enter 键不会运行它所绑定的功能。

【问题讨论】:

    标签: python python-3.x tkinter key-bindings


    【解决方案1】:

    当您将函数 fct 绑定到一个键(或任何其他类型的事件)时,该函数会使用一个参数调用该函数,例如 fct(event)event,具有取决于事件类型(鼠标位置, ...)。你的问题是你调用drawCheckbox的函数不带任何参数,所以每次回车都会报错

    TypeError: drawCheckbox() 接受 0 个位置参数,但给出了 1 个

    要更正它,您可以使用默认参数定义您的函数,

    def drawCheckbox(event=None):
        ...
    

    或者您可以使用 lambda 函数进行绑定

    master.bind('<Return>', lambda event: drawCheckbox())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多