2017-02-04 125 views
0

我已经看过各种教程,如何链接按钮按键盘按'返回'。我可以同时做到这一点,但一次只能做到一次。键盘样式是rootWindow.bind('<Return>' functionName,并且链接屏幕上的按钮是command=functionName。在同一时间使用时,我无法让他们工作。Tkinter链接按钮和'返回'键

这是什么,我有

def printthis(event): 
    print("worked") 

root = Tk() 
root.bind('<Return>', printthis) 

button1 = Button(root, text='Enter', command=printthis) 
button1.pack() 

root.mainloop() 

工作,当我运行当前的代码,我得到这个错误很基本的骨架,我只是不知道是什么“事件”,我应该传递到command=printthis

TypeError: printthis() missing 1 required positional argument: 'event'

由于我使用Python 3.x的一个方面说明

回答

2

当你绑定一个函数时,一旦绑定动作发生,事件对象就会被传入。如果你想让你的功能在事件和按钮按下时都有效,那么你有两种选择。

首先是如果你的函数可能需要事件对象。然后让你的函数为事件采取可选参数。

def printthis(event = None): 
    if event is None: 
     # handle this case 

    # otherwise handle event object normally. 

第二个是,如果你不关心的事件对象,则第一个仍然有效(你只是不使用事件参数),或结合时,你可以使用lambda

def printthis(): 
    print("worked") 

root.bind('<Return>', lambda e: printthis()) 

lambda需要e是事件对象,然后不经过在e丢弃它调用你的函数。

+0

谢谢!第二个选项完美运作 – Goalieman

1

与绑定相关联的功能需要放置作为事件的参数,但与Button关联的回调不需要它。解决方案是创建一个绑定到Button并从bind回调中调用的函数。

from tkinter import * 

def printthis(event): 
    func() 

def func(): 
    print("worked") 

root = Tk() 
root.bind('<Return>', printthis) 

button1 = Button(root, text='Enter', command=func) 
button1.pack() 

root.mainloop()