使用Tkinter将一个按钮绑定到两个事件

时间:2012-03-26 23:53:25

标签: python events tkinter

我刚开始编程并正在制作Tic-Tac-Toe计划。在我的程序中,我有一个显示功能,它会改变并确保输入的内容是有效的,还有一个胜利检查器。有没有办法可以将这两个函数绑定到回车键?

类似的东西:

RowEnt.bind("<Return>", display, checkWin)

3 个答案:

答案 0 :(得分:11)

绑定处理程序时,密钥正在传递add="+"。这告诉事件调度程序将此处理程序添加到处理程序列表中。如果没有此参数,新处理程序将替换处理程序列表。

try:
    import Tkinter as tkinter # for Python 2
except ImportError:
    import tkinter # for Python 3

def on_click_1(e):
    print("First handler fired")

def on_click_2(e):
    print("Second handler fired")

tk = tkinter.Tk()
myButton = tkinter.Button(tk, text="Click Me!")
myButton.pack()

# this first add is not required in this example, but it's good form.
myButton.bind("<Button>", on_click_1, add="+")

# this add IS required for on_click_1 to remain in the handler list
myButton.bind("<Button>", on_click_2, add="+")

tk.mainloop()

答案 1 :(得分:6)

你可以将这两个函数嵌套在另一个函数中:)例​​如:

def addone(num1):
    num1=int(num1)+1

def subtractone(num1):
    num1=int(num1)-1

def combine():
    addone(1)
    subtractone(1)

如果您想要同时调用它们,只需使用combine()作为您调用的函数:)

答案 2 :(得分:1)

此处,只有一个函数被调用为调用按钮(invoke_mybutton)的直接结果,它所做的只是生成虚拟事件<<MyButton-Command>>>。只要Tk尚未使用该名称,就可以将此虚拟事件命名为任何名称。一旦到位,您可以整天使用<<MyButton-Command>>>选项绑定和取消绑定到add='+',您将获得键盘绑定的好处,而Bryan Oakley指的是这样。

try:
    import Tkinter as tkinter # for Python 2
except ImportError:
    import tkinter # for Python 3

def invoke_mybutton():
    tk.eval("event generate " + str(myButton) + " <<MyButton-Command>>")

def command_1(e):
    print("first fired")

def command_2(e):
    print("second fired")

tk = tkinter.Tk()
myButton = tkinter.Button(tk, text="Click Me!", command=invoke_mybutton)
myButton.pack()
myButton.bind("<<MyButton-Command>>", command_1, add="+")
myButton.bind("<<MyButton-Command>>", command_2, add="+")
tk.mainloop()