Pytest插件打开GUI

时间:2015-09-22 14:49:35

标签: python multithreading tkinter pytest

我正在尝试创建一个py.test插件来重现Pydev for Eclipse的行为,你可以在下图中看到:

Pydev

基本上,我们的想法是在调用pytest_sessionstart()期间打开一个空窗口,用pytest_runtest_makereport()返回的对象填充它(测试和进度条的更新列表),以及使用pytest_unconfigure()关闭它。

我尝试使用以下代码使用Tkinter实现此目的:

import Tkinter


def pytest_sessionstart(session):
    print "Tests are starting"
    Tkinter.Tk().mainloop()
    print "The window was opened"  # This step is never reached

运行测试时,它会打印第一个句子,打开窗口但不会返回到py.test,直到我们关闭窗口。
如果我删除了对mainloop()的调用,则会打开窗口但会立即销毁 我还尝试通过以下方式在单独的线程中打开窗口:

t = threading.Thread(target=Tkinter.Tk().mainloop())

但没有成功。无论如何,线程选项看起来并不是很好,因为Tkinter必须在主线程中运行,这在py.test插件的情况下是不可能的。

那么,你们有没有想过如何解决这个问题?唯一的要求是保持py.test。

提前谢谢你:)

1 个答案:

答案 0 :(得分:0)

Tkinter.Tk()。mainloop()是while True循环。您将不会摆脱困境。我认为有两种方法可以解决您的问题:

  1. 在Tkinter应用程序中使用pytest。您可以在this之类的tkinter代码中调用pytest。

  2. 在其他线程中使用pytest并将pytest的输出通过管道传递到Tkinter应用程序。