Python Pytest插件打开GUI
我正在尝试创建一个py.test插件来重现Pydev for Eclipse行为,您可以在下图中看到: 基本上,这个想法是在调用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
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)有效。