情景式(modal)的Toplevel窗口

2019年9月11日 / 15次阅读 / Last Modified 2019年9月11日
tkinter

Python的tkinter模块,提供的Toplevel窗口,默认是非情景式的,即modaless。这种modaless式的窗口存在一个问题,即此窗口打开后,用户还可以对原窗口(父窗口)进行操作。我们在有些事情,需要这种modaless非情景式的窗口,而有的时候确实也需要modal式的Toplevel窗口。

modal窗口

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()

modaless窗口

默认情况下,tkinter提供的Toplevel窗口就是modaless式的。如果多个窗口做不同的事情,相互之间没有需要互斥的共享资源,这种窗口就很合适了。专门用来显示打印日志的窗口,就应该使用modaless式的窗口,它完全不影响其它界面组件,只是保存着打印出来的信息。

-- EOF --

本文链接:https://www.pynote.net/archives/1120

留言区

《情景式(modal)的Toplevel窗口》有2条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    Toplevel窗口一定要有一个root作为基础,就算代码的root参数是None,底层也会自动创建一个root窗口出来。 [回复]

  • 麦新杰

    一个GUI程序,任意时刻只能有一个root窗口,这个root窗口调用mainloop函数后,后面的代码就阻塞了!因此,Toplevel控件就是用来解决不能多个root都mainloop的问题的。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top