键盘绑定事件tkinter无法正常工作

时间:2016-08-26 22:12:22

标签: python-3.x tkinter

我一直在尝试在 Python 3 中添加一个激活功能的键盘快捷键。

from tkinter import *
from tkinter import messagebox
root = Tk()
def myThing():
    messagebox.showinfo("Hi", "Hello")
root.bind_all("<control-m>", myThing)
root.mainloop()

但是当我按下控制器m时,会出现:

Error

抱歉,复制粘贴不适用于命令提示符

但是,当我这样做时:

from tkinter import *
from tkinter import messagebox
root = Tk()
def myThing(k):
    print(k)
root.bind_all("<Control-m>", myThing)
root.mainloop()

这样做:

enter image description here

我做错了什么?

我知道网上有这样的问题,但我尝试了所有这些,并得到了这个错误。我问了这个问题,因为答案对我来说不够清楚。

PS:这是python 3.5.2

2 个答案:

答案 0 :(得分:1)

将事件绑定到函数时,tkinter将始终传入表示事件的对象。大多数人将此参数命名为eventevt

def myThing(event):
    ...

此对象具有各种有用的信息,例如对捕获事件的窗口小部件的引用,事件的x / y坐标,按下的键(在键盘事件的情况下)等等。

如果您的函数没有使用此事件,并且您希望将此函数用于绑定和直接调用,则可以使事件可选。当然,如果你这样做,你必须确保函数的主体不依赖于参数。

def myThing(event=None):
    ...

官方python tkinter docs以及与tkinter相关的每个教程和文档站点都提到了这一点。这就是python文档所说的:

  

... func 是一个Python函数,在事件发生时调用一个参数。 Event实例将作为参数传递。 (以这种方式部署的函数通常称为回调。)

答案 1 :(得分:0)

在您的第二个示例中,您说 df = pd.read_csv(open("name_of_the_csv.csv")) for i in xrange(len(df.columns)): column_list = df[df.columns[i]].values 。结果是打印print(k)对象。这意味着它有效。但是,在第二个代码段中,您绑定了tkinter.Event而不是<Control-m>。由于<control-m>似乎有用,只需将第一个代码段中的<Control-m>大写。

阅读错误。问题是给c一个论点。但是,在您的第一个代码段中,您已将myThing()定义为myThing()而不是def myThing()

阅读和理解Python中的错误是一项非常有价值的技能。如果您知道Python提供的错误类型,您可以轻松解读问题所在。