2011-05-29 66 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