我正在尝试学习如何使用Tkinter。 为此,我创建了一个小型应用程序,并打算使用Pytest创建一个单元测试。
有一个部分可以创建标签并为其设置超时,一旦超时,标签将被销毁,但我看到要销毁的回调从未被调用
这是一个更大的方法
self.labels = deque()
myLabel.after(timeout, myLabel.destroy)
self.labels.appendleft(myLabel)
class MockedClass(myTkinterApp):
def __init__(self, timeout):
self.label_timeout = label_timeout
self.tk = Tk()
self.labels = deque()
def test_timeout_reached_label_destroyed():
obj = MockedClass(label_timeout=1)
time.sleep(2)
assert obj.labels[0].winfo_exists() is False
我看到的是从未调用过回调。 我想念什么?
答案 0 :(得分:1)
要调用回调,tkinter必须处理事件队列中的事件。这是mainloop
的主要工作。在没有mainloop
的情况下,您可以通过调用根窗口的update
方法来请求tkinter处理所有事件。