2016-11-09 50 views

回答

0

不,没有内置任何内容。您必须添加自定义绑定。

例如,您可以在Button类上添加类绑定。例如:

root.bind_class("Button", "<ButtonPress-1>", log_buttonpress, add="+") 

然后,您可以定义一个名为log_buttonpress方法,它看起来是这样的:

def log_buttonpress(self, event): 
    with open("/tmp/log.txt", "a+") as f: 
     f.write("=> " + event.widget.cget("text") + "\n") 

当然,这只会捕捉鼠标点击。它不会捕获使用键盘点击的按钮。此外,在释放按钮之前,不会调用该按钮的命令,因此可能会记录被点击但未实际激活的按钮。这些问题是可以解决的,但需要更多的代码。这只是显示了一般概念,而不是剪切和粘贴解决方案。

另一种创建自己的子类Button并将此特殊绑定添加到每个实例的方法。通过使用绑定标签,您可以为每个实例添加一个特殊标签,然后您只需为该标签设置一个绑定即可。

例如:

class MyButton(tk.Button): 
    def __init__(self, *args, **kwargs): 
     tk.Button.__init__(self, *args, **kwargs) 
     bindtags = list(self.bindtags()) 
     bindtags.insert(1, "MyButton") 
     self.bindtags(tuple(bindtags)) 

    @classmethod 
    def log_button(cls, event): 
     with open("/tmp/junk.txt", "a+") as f: 
      f.write("?> " + event.widget.cget("text") + "\n") 

... 
root = tk.Tk() 
root.bind_class("MyButton", "<ButtonRelease-1>", MyButton.log_button) 

b1 = MyButton(...) 
b2 = MyButton(...) 
如果使用`命令=`或`绑定()`与每一个按钮,那么您可以分配一些函数来做到这一点
+0

谢谢:)这对我有很大的帮助:) – Supertraff

相关问题