Python中tkinter的mainloop函数实质

正文

以下是一般大多数tkinter程序员都共有的步骤,它的代码做了以下这些事情:
1.从痛苦inter模块中加载一个组件类。
2.创建该组件类的实例为标签类
3.在父组件中打包新标签。
4.调用主循环,显示窗口,同时开始tkinter的事件循环。
mainloop方法最后执行,将标签显示在屏幕,进入等待状态(注:若组件未打包,则不会在窗口中显示),准备响应用户发起的GUI事件。在mainloop函数中,tkinter内部会监控这些事件,如键盘活动,鼠标单击等。事实上,tkinter的mainloop函数与下面的Python伪代码实质是一样的:

def mainloop():
	while the main window has not been closed:
		if an event has occurred:
			run the associated event handler function

由于这个事件模型,只要GUI还在屏幕上,mainloop调用就不会返回执行代码。当我们写大型代码时,调用mainloop后唯一的做法就是注册调用管理器来响应事件。直到满足终止条件时,调用Tk()实例中的quit来打断mainloop的执行。事实上sys.exit函数也可以用来退出GUI,它通过抛出一个异常进而退出程序,该异常是可以进行捕获的(千万不要采用os._exit方法,它同样可以退出整个程序,但它不会执行清理动作,并且它不能被捕获)。窗口(如Tk根窗口,TopLevel实例)中的destroy函数也可以用来关闭GUI,不过我们通常不采用该方法,但它与quit函数不同,当程序中有多个Tk根窗口时,destroy只有在最后一个根窗口被关闭后才会退出GUI。

当然,在mainloop中我们也可以对这些事件进行过滤等操作,不过这与本文无太大关联。

总结自《Python编程》第四版----O’REILLY著。
仅用于参考理解

推广下自建博客的地址:https://gh.sanqii.top

你可能感兴趣的:(Python中tkinter的mainloop函数实质)