在tkinter中生成单击事件

时间:2011-05-29 09:49:01

标签: python unit-testing tkinter

我要对我的tkitner GUI进行单元测试。

因此我尝试从单独的线程生成点击事件。 以下是测试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 "!"

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

1 个答案:

答案 0 :(得分:2)

如果我没记错的话(自从我尝试了这么多年以来,我可能不会这样做),光标需要通过按钮才能触发绑定。

你知道按钮的“调用”方法吗?您可以使用它来模拟按下按钮。