如何测试Tkinter标签回调

时间:2018-09-29 19:00:32

标签: python tkinter

Backgournd

我正在尝试学习如何使用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

我看到的是从未调用过回调。 我想念什么?

1 个答案:

答案 0 :(得分:1)

要调用回调,tkinter必须处理事件队列中的事件。这是mainloop的主要工作。在没有mainloop的情况下,您可以通过调用根窗口的update方法来请求tkinter处理所有事件。