前些日子,我想本身写个小工具,仅选择文本文件处理成我须要的格式化文本。但,除了显示文件选择框外,我又不想显示其余窗体,因此了开始了本文的探索之旅。html
探索环境:
Python: 2.7/3.6
OS: Windows 10/Linux Mint 18
GUI: Tkinterpython
我查了下文本选择框MessageBox是Tkinter下的一个包,必须依托于主窗体,不然无法使用。但在主窗体上再单独放一个孤立的按钮,我以为不值得,因此想着能不能让主窗体不显示(隐藏)。编程
import tkinter.messagebox from tkinter import * tkinter.Tk().withdraw(); tkinter.messagebox.showinfo("标题","内容");
我最初查到的资料,大体就是上面的样子(原始资料已找不到,很抱歉),也就是说withdraw方法让窗口隐藏了。工具
withdraw()
Removes the window from the screen, without destroying it.
Reference: https://www.tutorialspoint.com/python3/tk_toplevel.htm布局
以前一直不解withdraw到底干了啥,最近看到上面的这段描述我才知道,withdraw从屏幕上移除了窗体,可是没有销毁它。大概和隐藏也差很少了,嗯,初步目标算是达成。学习
做为一个不折腾不舒服星人,单单一个隐藏窗体怎么能知足我呢?不可能,要是跑出别的窗体出来害我怎么办?治他,先下手为强。
百度了一下,出现了tk(根窗口)和toplevel(顶级窗口)。.net
Toplevel(顶级窗口)组件相似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口一般拥有标题栏、边框等部件,和 Tk() 建立出来的根窗口是同样的,共享着同样的方法。
Reference: https://blog.csdn.net/sinat_41104353/article/details/79320155code
有点懵懂的只知其一;不知其二,也就是看起来实际上只有tk一种,toplevel只是一种组件有着相似窗体的功能和属性。htm
咱们都见过美术生写生的情景,先支一个画架,放上画板,蒙上画布,构思内容,用铅笔画草图,组织结构和比例,调色板调色,最后画笔勾勒。相应的,对应到tkinter编程,那么咱们的显示屏就是支起来的画架,根窗体就是画板,在tkinter中则是Toplevel,画布就是tkinter中的容器(Frame),画板上能够放不少张画布(Convas),tkinter中的容器中也能够放不少个容器,绘画中的构图布局则是tkinter中的布局管理器(几何管理器),绘画的内容就是tkinter中的一个个小组件,一幅画由许多元素构成,而咱们的GUI界面,就是有一个个组件拼装起来的,它们就是widget。
Reference: http://www.javashuo.com/article/p-gfmlwmpf-cd.htmlblog
上面这篇博客的做者比喻的很形象,toplevel是画板,frame是画布,我的感受很形象,也更加确信了toplevel仅仅是一个组件的观点。 好了,此次就折腾这么写东西,算是留篇学习笔记,有不甚专业之处请多包涵,欢迎有不一样的看法高手们留言指教。