前些日子,我想自己写个小工具,仅选择文本文件处理成我需要的格式化文本。但,除了显示文件选择框外,我又不想显示其他窗体,所以了开始了本文的探索之旅。
探索环境:
Python: 2.7/3.6
OS: Windows 10/Linux Mint 18
GUI: Tkinter
1.隐藏窗体
我查了下文本选择框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从屏幕上移除了窗体,但是没有销毁它。大概和隐藏也差不多了,嗯,初步目标算是达成。
2.Tkinter中的窗体
作为一个不折腾不舒服星人,单单一个隐藏窗体怎么能满足我呢?不可能,要是跑出别的窗体出来害我怎么办?治他,先下手为强。
百度了一下,出现了tk(根窗口)和toplevel(顶级窗口)。
Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件,和 Tk() 创建出来的根窗口是一样的,共享着一样的方法。
Reference: https://blog.youkuaiyun.com/sinat_41104353/article/details/79320155
有点懵懂的一知半解,也就是看起来实际上只有tk一种,toplevel只是一种组件有着类似窗体的功能和属性。
我们都见过美术生写生的情景,先支一个画架,放上画板,蒙上画布,构思内容,用铅笔画草图,组织结构和比例,调色板调色,最后画笔勾勒。相应的,对应到tkinter编程,那么我们的显示屏就是支起来的画架,根窗体就是画板,在tkinter中则是Toplevel,画布就是tkinter中的容器(Frame),画板上可以放很多张画布(Convas),tkinter中的容器中也可以放很多个容器,绘画中的构图布局则是tkinter中的布局管理器(几何管理器),绘画的内容就是tkinter中的一个个小组件,一幅画由许多元素构成,而我们的GUI界面,就是有一个个组件拼装起来的,它们就是widget。
Reference: https://www.cnblogs.com/shwee/p/9427975.html
上面这篇博客的作者比喻的很形象,toplevel是画板,frame是画布,个人感觉很形象,也更加确信了toplevel仅仅是一个组件的观点。
好了,这次就折腾这么写东西,算是留篇学习笔记,有不甚专业之处请多包涵,欢迎有不同的见解高手们留言指教。