如何使用nosetests测试以下代码?
# GUI
try:
# for Python2
import Tkinter as tk
except ImportError:
# for Python3
import tkinter as tk
def main():
root = tk.Tk()
canvas = tk.Canvas(root, width=250, height=250)
canvas.pack()
root.bind('<B1-Motion>', lambda x: True)
root.bind('<Button-1>', lambda x: True)
root.mainloop()
当我呼叫main()
时,主循环被执行。我该如何防止这种情况?
答案 0 :(得分:0)
不是调用root.mainloop(),而是调用root.update()。这只会运行tk循环一次(因此任何未决事件将由您的应用程序调度和处理)。
然后,测试应用程序的行为就变成了一系列步骤:
root.event_generate('<B1-Motion>') # will generate a "fake" event <B1-Motion>
root.update()
# test that '<B1-Motion>' callback was correctly executed (by eg checking an expected state of you app
root.event_generate('<Button-1>')
root.update()
# test ....
请注意,您还可以通过调用直接调用按钮(就像单击按钮一样) button.invoke()
答案 1 :(得分:-1)
要停止运行mainloop(),你可以注释掉这一行,这将运行main()而不用Tkinter创建画布。
try:
# for Python2
import Tkinter as tk
except ImportError:
# for Python3
import tkinter as tk
def main():
root = tk.Tk()
canvas = tk.Canvas(root, width=250, height=250)
canvas.pack()
root.bind('<B1-Motion>', lambda x: True)
root.bind('<Button-1>', lambda x: True)
#root.mainloop() """#stops the line being run"""
main()
或在main()函数外部使用root.mainloop()并注释掉mainloop()
try:
# for Python2
import Tkinter as tk
except ImportError:
# for Python3
import tkinter as tk
def main():
root = tk.Tk()
canvas = tk.Canvas(root, width=250, height=250)
canvas.pack()
root.bind('<B1-Motion>', lambda x: True)
root.bind('<Button-1>', lambda x: True)
main()
#root.mainloop()