我可以将Travis-CI与Tkinter GUI一起使用吗?

时间:2019-07-03 16:15:40

标签: python tkinter travis-ci

我想将Travis-CI用于我在Tkinter中编写的程序,但是我无法通过构建。

示例程序 TravisTest.py

import tkinter as tk
from tkinter import ttk

class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent

        root.title('TEST')

        self.Hi = tk.Label(self, text="Hi!")
        self.Hi.pack()

if __name__ == "__main__":
    root=tk.Tk()
    MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()

.travis.yml

language: python
python:
  - "3.5"
  - "3.6"
dist: xenial
services:
  - xvfb
script: python TravisTest.py

该程序似乎可以正常启动,但是由于它不会自行退出,因此该构建只需等待10分钟,然后即可超时。

  

$ python TravisTest.py

     

最近10个月未收到任何输出,   这可能表示构建停滞或   建立自己。

     

检查有关如何调整构建的详细信息   配置在:   https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received

     

构建已终止

我是否需要在代码中添加一些Travis-CI特定的测试用例,以自行退出?还是应该不使用Travis-CI这样的东西?

1 个答案:

答案 0 :(得分:2)

root.mainloop()运行事件循环,直到某些事件停止为止。删除它,将其替换为root.update()并可能替换为root.update_idletasks()以确保完成所有gui操作,或者通过添加类似root.after(10, root.quit)

的方式停止它

python测试套件具有针对tkinter,IDLE和turtle的gui测试。使用xvfb,它们可以在Windows(Appveyor),Linux(Travis)和Mac(MS Azure,也可以在Windows和Linux上运行测试)上运行。该脚本与python -m test等效,该脚本运行所有test.test_xyz模块。 Stdlib模块不以“ main”身份运行。

test_idle中的IDLE测试不运行mainloop()。当前,除其他外,可以通过不运行包含主要mainloop()调用的idlelib.pyshell.main()来避免这种情况。 (应该对pyshell.main进行重构,以除去大多数其他内容,以分离可在不调用mainloop()的情况下进行测试的功能。)创建窗口小部件的IDLE测试使用invoke,generate_event,update,对于干净出口,则使用update_idletasks。实际测试在idlelib.idle_test.test_ *中。关于测试其中包含的tkinter应用程序,有很多来之不易的知识。要测试代码的非GUI部分,请使用模拟小部件帮助。