将函数传递给tkinter对象

时间:2014-11-10 08:14:49

标签: python tkinter

我在python 3.4中使用tkinter创建虚拟键盘。

class Keyboard(Frame):

def __init__(self, root, callback):
    Frame.__init__(self, root, callback)
    self.pack()

回调将是用户按下某个键时调用的函数。 所以我会像:

一样运行它
def press(key):
    print(key)

root = Tk()
keyb = Keyboard(root, press)
keyb.grid()
root.mainloop()

但是,这不一定是将函数按下传入键盘的正确方法,因为我收到错误"AttributeError: 'function' object has no attribute 'items'" 那么如何将此功能传递给键盘呢?

1 个答案:

答案 0 :(得分:0)

首先,不要混用packgrid。见http://effbot.org/tkinterbook/pack.htm

其次,Frame类没有callback参数,但是在你的代码中你用一个参数调用它:

Frame.__init__(self, root, callback)

请参阅http://effbot.org/tkinterbook/frame.htm#reference了解正确用法。

您正在寻找的内容就是这样,其中callback已完全从Keyboard中移除:

def press(key):
    print(key)

root = Tk()
keyb = Keyboard(root)
keyb.bind("<Key>", key)