Python Pytest插件打开GUI

Python Pytest插件打开GUI,python,multithreading,tkinter,pytest,Python,Multithreading,Tkinter,Pytest,我正在尝试创建一个py.test插件来重现Pydev for Eclipse行为,您可以在下图中看到: 基本上,这个想法是在调用pytest\u sessionstart()期间打开一个空窗口,用pytest\u runtest\u makereport()返回的对象填充它(更新测试列表和进度条),并用pytest\u unconfigure()关闭它 我试图通过Tkinter实现这一点,方法是使用以下代码: import Tkinter def pytest_sessionstart(s

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

基本上,这个想法是在调用
pytest\u sessionstart()
期间打开一个空窗口,用
pytest\u runtest\u makereport()
返回的对象填充它(更新测试列表和进度条),并用
pytest\u 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。

提前感谢:)

Tkinter.Tk().mainloop()是一个while-True循环。你无法摆脱它。在我看来,有两种方法可以解决你的问题:

  • 在Tkinter应用程序中使用pytest。您可以在tkinter代码中调用pytest,如

  • 在不同的线程中使用pytest,并将pytest的输出传输到Tkinter应用程序


  • 试试wxPython,非常感谢您的回答。我尝试了这个解决方案,但是应用程序一启动就崩溃了。作者描述了三种方法,只有第一种(在主线程中运行GUI)有效。