2011-05-29 35 views
2

我正在单元测试我的tkitner GUI。在tkinter中生成单击事件

因此我试图从一个单独的线程生成点击事件。 下面是一个例子测试Tkinter.Button:

import unittest, threading 
from Tkinter import * 

class clickThread(threading.Thread): 
    def __init__(self, root): 
     threading.Thread.__init__(self) 
     self.root = root 

    def run(self): 
     button = filter(lambda a: isinstance(a, Button), self.root.children.values())[0] 
     print button 
     button.focus() 
     button.event_generate("<Button-1>") 
     button.event_generate("<ButtonRelease-1>") 
     print "clicked" 

class Test(unittest.TestCase): 
    def testName(self): 
     root = Tk() 
     button = Button(root, command=self.returnEvent) 
     button.pack() 
     thread = clickThread(root) 
     thread.start() 
     root.mainloop() 

    def returnEvent(self): 
     print "!" 

方法Test.returnEvent不是由我产生点击事件被调用。但是,如果我真的点击,它会按预期工作。

回答

2

如果我记得正确(自从我尝试此功能以来,我可能没有这么多年),光标需要超过一个按钮才能激活绑定。

您是否意识到按钮的“调用”方法?你可以用它来模拟按钮的按钮。

+0

谢谢我没有错过调用。仍在学习python和tkinter :) – kasten 2011-05-29 17:19:32