前些日子,我想本身寫個小工具,僅選擇文本文件處理成我須要的格式化文本。但,除了顯示文件選擇框外,我又不想顯示其餘窗體,因此了開始了本文的探索之旅。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僅僅是一個組件的觀點。 好了,此次就折騰這麼寫東西,算是留篇學習筆記,有不甚專業之處請多包涵,歡迎有不一樣的看法高手們留言指教。