2019年9月11日 / 723次阅读 / Last Modified 2019年9月11日
tkinter
Python的tkinter模块,提供的Toplevel窗口,默认是非情景式的,即modaless。这种modaless式的窗口存在一个问题,即此窗口打开后,用户还可以对原窗口(父窗口)进行操作。我们在有些事情,需要这种modaless非情景式的窗口,而有的时候确实也需要modal式的Toplevel窗口。
tkinter模块提供的messagebox,ask*等窗口,都是modal式的,这类对话框窗口,需要等待用户的反应,然后再继续执行程序。
如果你也需要这种窗口特性,而又需要自定义窗口中各种其它控件,就需要使用modal式的Toplevel窗口。
tkinter默认提供的Toplevel窗口是modaless式,我们可以通过一个函数,将其转换成modal式的:
>>> import tkinter as tk
>>> from tkinter import Toplevel
>>> root = tk.Tk()
>>> tp = Toplevel(root)
>>> tp.grab_set() # switch to modal window
>>> root.mainloop()
默认情况下,tkinter提供的Toplevel窗口就是modaless式的。如果多个窗口做不同的事情,相互之间没有需要互斥的共享资源,这种窗口就很合适了。专门用来显示打印日志的窗口,就应该使用modaless式的窗口,它完全不影响其它界面组件,只是保存着打印出来的信息。
-- EOF --
本文链接:https://www.pynote.net/archives/1120
《情景式(modal)的Toplevel窗口》有2条留言
前一篇:给Entry控件设置默认值
后一篇:Python带条件判断的赋值语句
©Copyright 麦新杰 Since 2019 Python笔记
Toplevel窗口一定要有一个root作为基础,就算代码的root参数是None,底层也会自动创建一个root窗口出来。 [ ]
一个GUI程序,任意时刻只能有一个root窗口,这个root窗口调用mainloop函数后,后面的代码就阻塞了!因此,Toplevel控件就是用来解决不能多个root都mainloop的问题的。 [ ]