tkinter 簡單教程

1、前言

  因爲本篇文章較長,因此下面給出內容目錄方便跳轉閱讀,固然也能夠用博客頁面最右側的文章目錄導航欄進行跳轉查閱。python

  1、前言編程

  2、Tkinter 是什麼canvas

  3、Tkinter 控件詳細介紹框架

    1. Tkinter 模塊元素簡要說明編輯器

    2. 經常使用窗口部件及簡要說明:ide

  4、動手實踐學習函數

    1. 建立主窗口及Label部件(標籤)建立使用工具

    2. Button窗口部件oop

    3. Entry窗口部件佈局

    4. Text窗口部件

    5. Listbox窗口部件

    6. Radiobutton窗口部件

    7. Checkbutton窗口部件 

    8. Scale窗口部件

    9. Canvas窗口部件

    10. Menu窗口部件

    11. Frame 窗口部件

    12. messageBox窗口部件

    13. 窗口部件三种放置方式pack/grid/place

    14. 綜合練習,用戶登陸窗口例子

    15. 其餘部件後續再補充...

2、Tkinter是什麼

  Tkinter 是使用 python 進行窗口視窗設計的模塊。Tkinter模塊("Tk 接口")是Python的標準Tk GUI工具包的接口。做爲 python 特定的GUI界面,是一個圖像的窗口,tkinter是python 自帶的,能夠編輯的GUI界面,咱們能夠用GUI 實現不少直觀的功能,好比想開發一個計算器,若是隻是一個程序輸入,輸出窗口的話,是沒用用戶體驗的。全部開發一個圖像化的小窗口,就是必要的。

  對於稍有GUI編程經驗的人來講,Python的Tkinter界面庫是很是簡單的。python的GUI庫很是多,選擇Tkinter,一是最爲簡單,二是自帶庫,不需下載安裝,隨時使用,三則是從需求出發,Python做爲一種腳本語言,一種膠水語言,通常不會用它來開發複雜的桌面應用,它並不具有這方面的優點,使用Python,能夠把它做爲一個靈活的工具,而不是做爲主要開發語言,那麼在工做中,須要製做一個小工具,確定是須要有界面的,不只本身用,也能分享別人使用,在這種需求下,Tkinter是足夠勝任的!

  這篇文章主要作一個簡單概述和實踐編程,對於從沒有接觸過GUI的新手,在腦中樹立一個基本的界面編程概念,同時本身也能學會如何簡單的實現一些小的圖形窗口功能。

  對於Tkinter編程,能夠用兩個比喻來理解:

  • 第一個,做畫。咱們都見過美術生寫生的情景,先支一個畫架,放上畫板,蒙上畫布,構思內容,用鉛筆畫草圖,組織結構和比例,調色板調色,最後畫筆勾勒。相應的,對應到tkinter編程,那麼咱們的顯示屏就是支起來的畫架,根窗體就是畫板,在tkinter中則是Toplevel,畫布就是tkinter中的容器(Frame),畫板上能夠放不少張畫布(Convas),tkinter中的容器中也能夠放不少個容器,繪畫中的構圖佈局則是tkinter中的佈局管理器(幾何管理器),繪畫的內容就是tkinter中的一個個小組件,一幅畫由許多元素構成,而咱們的GUI界面,就是有一個個組件拼裝起來的,它們就是widget。
  • 第二個,咱們小時候都玩過積木,只要發揮創意,相同的積木能夠堆出各類造型。tkinter的組件也能夠看作一個個積木,形狀或許不一樣,其本質都是同樣的,就是一個積木,無論它長什麼樣子,它始終就是積木!因此這些小組件都有許多共性,另外,我的認爲,學習界面編程,最重要的不是一開始學習每一個積木的樣子,不是學習每一個組件怎麼用,而是這些組件該怎麼放。初始學習中,怎麼放遠遠比怎麼用重要的多。網上有大量的文章資料,基本全是介紹組件怎麼用的,對於怎麼放,也就是tkinter中的佈局管理器,都是一筆帶過,這對初學者有點本末倒置,或許絕大部分是轉載的緣由吧,極少是本身真正寫的。組件怎麼用不是最迫切的,用到的時候再去了解也不遲,邊用邊學反而更好。所以我將專門寫一章,詳細介紹佈局管理器的使用。

3、Tkinter 控件詳細介紹

1. Tkinter 模塊元素簡要說明

 

The Button Widget
The Canvas Widget
The Checkbutton Widget
The Entry Widget
The Frame Widget
The Label Widget
The LabelFrame Widget
The Listbox Widget
The Menu Widget
The Menubutton Widget
The Message Widget
The OptionMenu Widget
The PanedWindow Widget
The Radiobutton Widget
The Scale Widget
The Scrollbar Widget
The Spinbox Widget
The Text Widget
The Toplevel Widget
Basic Widget Methods
Toplevel Window Methods

 

2. 經常使用窗口部件及簡要說明:

  Tkinter支持16個核心的窗口部件,這個16個核心窗口部件類簡要描述以下:

Button:一個簡單的按鈕,用來執行一個命令或別的操做。

Canvas:組織圖形。這個部件能夠用來繪製圖表和圖,建立圖形編輯器,實現定製窗口部件。

Checkbutton:表明一個變量,它有兩個不一樣的值。點擊這個按鈕將會在這兩個值間切換。

Entry:文本輸入域。

Frame:一個容器窗口部件。幀能夠有邊框和背景,當建立一個應用程序或dialog(對話)版面時,幀被用來組織其它的窗口部件。

Label:顯示一個文本或圖象。

Listbox:顯示供選方案的一個列表。listbox可以被配置來獲得radiobutton或checklist的行爲。

Menu:菜單條。用來實現下拉和彈出式菜單。

Menubutton:菜單按鈕。用來實現下拉式菜單。

Message:顯示一文本。相似label窗口部件,可是可以自動地調整文本到給定的寬度或比率。

Radiobutton:表明一個變量,它能夠有多個值中的一個。點擊它將爲這個變量設置值,而且清除與這同一變量相關的其它radiobutton。

Scale:容許你經過滑塊來設置一數字值。

Scrollbar:爲配合使用canvas, entry, listbox, and text窗口部件的標準滾動條。

Text:格式化文本顯示。容許你用不一樣的樣式和屬性來顯示和編輯文本。同時支持內嵌圖象和窗口。

Toplevel:一個容器窗口部件,做爲一個單獨的、最上面的窗口顯示。

messageBox:消息框,用於顯示你應用程序的消息框。(Python2中爲tkMessagebox)

注意在Tkinter中窗口部件類沒有分級;全部的窗口部件類在樹中都是兄弟關係。

全部這些窗口部件提供了Misc和幾何管理方法、配置管理方法和部件本身定義的另外的方法。此外,Toplevel類也提供窗口管理接口。這意味一個典型的窗口部件類提供了大約150種方法。

4、動手實踐學習

1. 建立主窗口及Label部件(標籤)建立使用

  咱們要學習使用上面提到的這些控件首先要建立一個主窗口,就像做畫同樣,先要架好架子和畫板,而後才能在上面放畫紙和各類繪畫元素,建立好主窗口才能在上面放置各類控件元素。而建立過程是很簡單的,以下:

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上設定標籤
  17.  
    l = tk.Label(window, text= '你好!this is Tkinter', bg='green', font=('Arial', 12), width=30, height=2)
  18.  
    # 說明: bg爲背景,font爲字體,width爲長,height爲高,這裏的長和高是字符的長和高,好比height=2,就是標籤有2個字符這麼高
  19.  
     
  20.  
    # 第5步,放置標籤
  21.  
    l.pack() # Label內容content區域放置位置,自動調節尺寸
  22.  
    # 放置lable的方法有:1)l.pack(); 2)l.place();
  23.  
     
  24.  
    # 第6步,主窗口循環顯示
  25.  
    window.mainloop()
  26.  
    # 注意,loop由於是循環的意思,window.mainloop就會讓window不斷的刷新,若是沒有mainloop,就是一個靜態的window,傳入進去的值就不會有循環,mainloop就至關於一個很大的while循環,有個while,每點擊一次就會更新一次,因此咱們必需要有循環
  27.  
    # 全部的窗口文件都必須有相似的mainloop函數,mainloop是窗口文件的關鍵的關鍵。

  測試效果:

2. Button窗口部件

  簡單說明:

  Button(按鈕)部件是一個標準的Tkinter窗口部件,用來實現各類按鈕。按鈕可以包含文本或圖象,而且你可以將按鈕與一個Python函數或方法相關聯。當這個按鈕被按下時,Tkinter自動調用相關聯的函數或方法。

按鈕僅能顯示一種字體,可是這個文本能夠跨行。另外,這個文本中的一個字母能夠有下劃線,例如標明一個快捷鍵。默認狀況,Tab鍵用於將焦點移動到一個按鈕部件。

  何時用按鈕部件

  簡言之,按鈕部件用來讓用戶說「立刻給我執行這個任務」,一般咱們用顯示在按鈕上的文本或圖象來提示。按鈕一般用在工具條中或應用程序窗口中,而且用來接收或忽略輸入在對話框中的數據。關於按鈕和輸入的數據的配合,能夠參看Checkbutton和Radiobutton部件。

  如何建立:

普通的按鈕很容易被建立,僅僅指定按鈕的內容(文本、位圖、圖象)和一個當按鈕被按下時的回調函數便可:

b = tk.Button(window, text="hit me", command=hit_me)

沒有回調函數的按鈕是沒有用的,當你按下這個按鈕時它什麼也不作。你可能在開發一個應用程序的時候想實現這種按鈕,好比爲了避免干擾你的beta版的測試者:

b = tk.Button(window, text="Help", command=DISABLED)

   示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上設定標籤
  17.  
    var = tk.StringVar() # 將label標籤的內容設置爲字符類型,用var來接收hit_me函數的傳出內容用以顯示在標籤上
  18.  
    l = tk.Label(window, textvariable=var, bg= 'green', fg='white', font=('Arial', 12), width=30, height=2)
  19.  
    # 說明: bg爲背景,fg爲字體顏色,font爲字體,width爲長,height爲高,這裏的長和高是字符的長和高,好比height=2,就是標籤有2個字符這麼高
  20.  
    l.pack()
  21.  
     
  22.  
    # 定義一個函數功能(內容本身自由編寫),供點擊Button按鍵時調用,調用命令參數command=函數名
  23.  
    on_hit = False
  24.  
    def hit_me():
  25.  
    global on_hit
  26.  
    if on_hit == False:
  27.  
    on_hit = True
  28.  
    var.set( 'you hit me')
  29.  
    else:
  30.  
    on_hit = False
  31.  
    var.set( '')
  32.  
     
  33.  
    # 第5步,在窗口界面設置放置Button按鍵
  34.  
    b = tk.Button(window, text= 'hit me', font=('Arial', 12), width=10, height=1, command=hit_me)
  35.  
    b.pack()
  36.  
     
  37.  
    # 第6步,主窗口循環顯示
  38.  
    window.mainloop()

  測試效果:

 

3. Entry窗口部件

  簡單說明:  

  Entry是tkinter類中提供的的一個單行文本輸入域,用來輸入顯示一行文本,收集鍵盤輸入(相似 HTML 中的 text)。

  何時用:

  須要用戶輸入用戶信息時,好比咱們平時使用軟件、登陸網頁時,用戶交互界面讓咱們登陸帳戶信息等時候能夠用到。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上設定輸入框控件entry並放置控件
  17.  
    e1 = tk.Entry(window, show= '*', font=('Arial', 14)) # 顯示成密文形式
  18.  
    e2 = tk.Entry(window, show= None, font=('Arial', 14)) # 顯示成明文形式
  19.  
    e1.pack()
  20.  
    e2.pack()
  21.  
     
  22.  
    # 第5步,主窗口循環顯示
  23.  
    window.mainloop()

  測試效果:

4. Text窗口部件

  簡單說明:  

  Text是tkinter類中提供的的一個多行文本區域,顯示多行文本,可用來收集(或顯示)用戶輸入的文字(相似 HTML 中的 textarea),格式化文本顯示,容許你用不一樣的樣式和屬性來顯示和編輯文本,同時支持內嵌圖象和窗口。

  何時用:

  在須要顯示編輯用戶、產品多行信息時,好比顯示用戶詳細描述文字,產品簡介等等,支持隨時編輯。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上設定輸入框控件entry框並放置
  17.  
    e = tk.Entry(window, show = None)#顯示成明文形式
  18.  
    e.pack()
  19.  
     
  20.  
    # 第5步,定義兩個觸發事件時的函數insert_point和insert_end(注意:由於Python的執行順序是從上往下,因此函數必定要放在按鈕的上面)
  21.  
    def insert_point(): # 在鼠標焦點處插入輸入內容
  22.  
    var = e.get()
  23.  
    t.insert( 'insert', var)
  24.  
    def insert_end(): # 在文本框內容最後接着插入輸入內容
  25.  
    var = e.get()
  26.  
    t.insert( 'end', var)
  27.  
     
  28.  
    # 第6步,建立並放置兩個按鈕分別觸發兩種狀況
  29.  
    b1 = tk.Button(window, text= 'insert point', width=10,
  30.  
    height= 2, command=insert_point)
  31.  
    b1.pack()
  32.  
    b2 = tk.Button(window, text= 'insert end', width=10,
  33.  
    height= 2, command=insert_end)
  34.  
    b2.pack()
  35.  
     
  36.  
    # 第7步,建立並放置一個多行文本框text用以顯示,指定height=3爲文本框是三個字符高度
  37.  
    t = tk.Text(window, height= 3)
  38.  
    t.pack()
  39.  
     
  40.  
    # 第8步,主窗口循環顯示
  41.  
    window.mainloop()

  測試效果:

5. Listbox窗口部件

  簡單說明:  

  Text是tkinter類中提供的的列表框部件,顯示供選方案的一個列表。listbox可以被配置來獲得radiobutton或checklist的行爲。

  何時用:

  在有一個不少內容選項組成的列表提供用戶選擇時會用到。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤label用以顯示並放置
  17.  
    var1 = tk.StringVar() # 建立變量,用var1用來接收鼠標點擊具體選項的內容
  18.  
    l = tk.Label(window, bg= 'green', fg='yellow',font=('Arial', 12), width=10, textvariable=var1)
  19.  
    l.pack()
  20.  
     
  21.  
    # 第6步,建立一個方法用於按鈕的點擊事件
  22.  
    def print_selection():
  23.  
    value = lb.get(lb.curselection()) # 獲取當前選中的文本
  24.  
    var1.set(value) # 爲label設置值
  25.  
     
  26.  
    # 第5步,建立一個按鈕並放置,點擊按鈕調用print_selection函數
  27.  
    b1 = tk.Button(window, text= 'print selection', width=15, height=2, command=print_selection)
  28.  
    b1.pack()
  29.  
     
  30.  
    # 第7步,建立Listbox併爲其添加內容
  31.  
    var2 = tk.StringVar()
  32.  
    var2.set(( 1,2,3,4)) # 爲變量var2設置值
  33.  
    # 建立Listbox
  34.  
    lb = tk.Listbox(window, listvariable=var2) #將var2的值賦給Listbox
  35.  
    # 建立一個list並將值循環添加到Listbox控件中
  36.  
    list_items = [ 11,22,33,44]
  37.  
    for item in list_items:
  38.  
    lb.insert( 'end', item) # 從最後一個位置開始加入值
  39.  
    lb.insert( 1, 'first') # 在第一個位置加入'first'字符
  40.  
    lb.insert( 2, 'second') # 在第二個位置加入'second'字符
  41.  
    lb.delete( 2) # 刪除第二個位置的字符
  42.  
    lb.pack()
  43.  
     
  44.  
    # 第8步,主窗口循環顯示
  45.  
    window.mainloop()

  測試效果:

6. Radiobutton窗口部件

  簡單說明:  

  Radiobutton:表明一個變量,它能夠有多個值中的一個。點擊它將爲這個變量設置值,而且清除與這同一變量相關的其它radiobutton。

  何時用:

  在有一個不少內容選項組成的選項列表提供用戶選擇時會用到,用戶一次只能選擇其中一個,不能多選。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤label用以顯示並放置
  17.  
    var = tk.StringVar() # 定義一個var用來將radiobutton的值和Label的值聯繫在一塊兒.
  18.  
    l = tk.Label(window, bg= 'yellow', width=20, text='empty')
  19.  
    l.pack()
  20.  
     
  21.  
    # 第6步,定義選項觸發函數功能
  22.  
    def print_selection():
  23.  
    l.config(text= 'you have selected ' + var.get())
  24.  
     
  25.  
    # 第5步,建立三個radiobutton選項,其中variable=var, value='A'的意思就是,當咱們鼠標選中了其中一個選項,把value的值A放到變量var中,而後賦值給variable
  26.  
    r1 = tk.Radiobutton(window, text= 'Option A', variable=var, value='A', command=print_selection)
  27.  
    r1.pack()
  28.  
    r2 = tk.Radiobutton(window, text= 'Option B', variable=var, value='B', command=print_selection)
  29.  
    r2.pack()
  30.  
    r3 = tk.Radiobutton(window, text= 'Option C', variable=var, value='C', command=print_selection)
  31.  
    r3.pack()
  32.  
     
  33.  
    # 第7步,主窗口循環顯示
  34.  
    window.mainloop()

  測試效果:

7. Checkbutton窗口部件

  簡單說明:  

  Checkbutton:表明一個變量,它有兩個不一樣的值。點擊這個按鈕將會在這兩個值間切換,選擇和取消選擇。

  何時用:

  在有一個不少內容選項組成的選項列表提供用戶選擇時會用到,用戶一次能夠選擇多個。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤label用以顯示並放置
  17.  
    l = tk.Label(window, bg= 'yellow', width=20, text='empty')
  18.  
    l.pack()
  19.  
     
  20.  
    # 第6步,定義觸發函數功能
  21.  
    def print_selection():
  22.  
    if (var1.get() == 1) & (var2.get() == 0): # 若是選中第一個選項,未選中第二個選項
  23.  
    l.config(text= 'I love only Python ')
  24.  
    elif (var1.get() == 0) & (var2.get() == 1): # 若是選中第二個選項,未選中第一個選項
  25.  
    l.config(text= 'I love only C++')
  26.  
    elif (var1.get() == 0) & (var2.get() == 0): # 若是兩個選項都未選中
  27.  
    l.config(text= 'I do not love either')
  28.  
    else:
  29.  
    l.config(text= 'I love both') # 若是兩個選項都選中
  30.  
     
  31.  
    # 第5步,定義兩個Checkbutton選項並放置
  32.  
    var1 = tk.IntVar() # 定義var1和var2整型變量用來存放選擇行爲返回值
  33.  
    var2 = tk.IntVar()
  34.  
    c1 = tk.Checkbutton(window, text= 'Python',variable=var1, onvalue=1, offvalue=0, command=print_selection) # 傳值原理相似於radiobutton部件
  35.  
    c1.pack()
  36.  
    c2 = tk.Checkbutton(window, text= 'C++',variable=var2, onvalue=1, offvalue=0, command=print_selection)
  37.  
    c2.pack()
  38.  
     
  39.  
    # 第7步,主窗口循環顯示
  40.  
    window.mainloop()

  測試效果:

  

8. Scale窗口部件

  簡單說明:  

  Scale: 尺度(拉動條),容許你經過滑塊來設置一數字值。

  何時用:

  在須要用戶給出評價等級,或者給出一個評價分數,或者拉動滑動條提供一個具體的數值等等。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤label用以顯示並放置
  17.  
    l = tk.Label(window, bg= 'green', fg='white', width=20, text='empty')
  18.  
    l.pack()
  19.  
     
  20.  
    # 第6步,定義一個觸發函數功能
  21.  
    def print_selection(v):
  22.  
    l.config(text= 'you have selected ' + v)
  23.  
    # 第5步,建立一個尺度滑條,長度200字符,從0開始10結束,以2爲刻度,精度爲0.01,觸發調用print_selection函數
  24.  
    s = tk.Scale(window, label= 'try me', from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=0,tickinterval=2, resolution=0.01, command=print_selection)
  25.  
    s.pack()
  26.  
     
  27.  
    # 第7步,主窗口循環顯示
  28.  
    window.mainloop()

  測試效果:

9. Canvas窗口部件

  簡單說明:  

  Canvas:畫布,提供繪圖功能(直線、橢圓、多邊形、矩形) 能夠包含圖形或位圖,用來繪製圖表和圖,建立圖形編輯器,實現定製窗口部件。

  何時用:

  在好比像用戶交互界面等,須要提供設計的圖標、圖形、logo等信息是能夠用到畫布。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立 500 * 200 大小的畫布並放置各類元素
  17.  
    canvas = tk.Canvas(window, bg= 'green', height=200, width=500)
  18.  
    # 說明圖片位置,並導入圖片到畫布上
  19.  
    image_file = tk.PhotoImage(file= 'pic.gif') # 圖片位置(相對路徑,與.py文件同一文件夾下,也能夠用絕對路徑,須要給定圖片具體絕對路徑)
  20.  
    image = canvas.create_image( 250, 0, anchor='n',image=image_file) # 圖片錨定點(n圖片頂端的中間點位置)放在畫布(250,0)座標處
  21.  
    # 定義多邊形參數,而後在畫布上畫出指定圖形
  22.  
    x0, y0, x1, y1 = 100, 100, 150, 150
  23.  
    line = canvas.create_line(x0 -50, y0-50, x1-50, y1-50) # 畫直線
  24.  
    oval = canvas.create_oval(x0+ 120, y0+50, x1+120, y1+50, fill='yellow') # 畫圓 用黃色填充
  25.  
    arc = canvas.create_arc(x0, y0+ 50, x1, y1+50, start=0, extent=180) # 畫扇形 從0度打開收到180度結束
  26.  
    rect = canvas.create_rectangle( 330, 30, 330+20, 30+20) # 畫矩形正方形
  27.  
    canvas.pack()
  28.  
     
  29.  
    # 第6步,觸發函數,用來必定指定圖形
  30.  
    def moveit():
  31.  
    canvas.move(rect, 2, 2) # 移動正方形rect(也能夠改爲其餘圖形名字用以移動一塊兒圖形、元素),按每次(x=2, y=2)步長進行移動
  32.  
     
  33.  
    # 第5步,定義一個按鈕用來移動指定圖形的在畫布上的位置
  34.  
    b = tk.Button(window, text= 'move item',command=moveit).pack()
  35.  
     
  36.  
    # 第7步,主窗口循環顯示
  37.  
    window.mainloop()

  所用圖片:

  固然你能夠隨意用你的一張圖片導入畫布試一試效果,圖片能夠用畫圖工具改一下像素大小,以避免圖片太大,導入畫布顯示不全,固然你也能夠用我提供的素材,下面是連接:https://files.cnblogs.com/files/shwee/pic.gif

 

  圖片錨定點位置參數圖:

  測試效果:

10. Menu窗口部件

  簡單說明:  

  Menu:菜單條,用來實現下拉和彈出式菜單,點下菜單後彈出的一個選項列表,用戶能夠從中選擇

  何時用:

  在好比像軟件或網頁交互界面等,須要提供菜單選項功能提供用戶選擇菜單選項功能時用到。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤用以顯示內容並放置
  17.  
    l = tk.Label(window, text= ' ', bg='green')
  18.  
    l.pack()
  19.  
     
  20.  
    # 第10步,定義一個函數功能,用來表明菜單選項的功能,這裏爲了操做簡單,定義的功能比較簡單
  21.  
    counter = 0
  22.  
    def do_job():
  23.  
    global counter
  24.  
    l.config(text= 'do '+ str(counter))
  25.  
    counter += 1
  26.  
     
  27.  
    # 第5步,建立一個菜單欄,這裏咱們能夠把他理解成一個容器,在窗口的上方
  28.  
    menubar = tk.Menu(window)
  29.  
     
  30.  
    # 第6步,建立一個File菜單項(默認不下拉,下拉內容包括New,Open,Save,Exit功能項)
  31.  
    filemenu = tk.Menu(menubar, tearoff= 0)
  32.  
    # 將上面定義的空菜單命名爲File,放在菜單欄中,就是裝入那個容器中
  33.  
    menubar.add_cascade(label= 'File', menu=filemenu)
  34.  
     
  35.  
    # 在File中加入New、Open、Save等小菜單,即咱們平時看到的下拉菜單,每個小菜單對應命令操做。
  36.  
    filemenu.add_command(label= 'New', command=do_job)
  37.  
    filemenu.add_command(label= 'Open', command=do_job)
  38.  
    filemenu.add_command(label= 'Save', command=do_job)
  39.  
    filemenu.add_separator() # 添加一條分隔線
  40.  
    filemenu.add_command(label= 'Exit', command=window.quit) # 用tkinter裏面自帶的quit()函數
  41.  
     
  42.  
    # 第7步,建立一個Edit菜單項(默認不下拉,下拉內容包括Cut,Copy,Paste功能項)
  43.  
    editmenu = tk.Menu(menubar, tearoff= 0)
  44.  
    # 將上面定義的空菜單命名爲 Edit,放在菜單欄中,就是裝入那個容器中
  45.  
    menubar.add_cascade(label= 'Edit', menu=editmenu)
  46.  
     
  47.  
    # 一樣的在 Edit 中加入Cut、Copy、Paste等小命令功能單元,若是點擊這些單元, 就會觸發do_job的功能
  48.  
    editmenu.add_command(label= 'Cut', command=do_job)
  49.  
    editmenu.add_command(label= 'Copy', command=do_job)
  50.  
    editmenu.add_command(label= 'Paste', command=do_job)
  51.  
     
  52.  
    # 第8步,建立第二級菜單,即菜單項裏面的菜單
  53.  
    submenu = tk.Menu(filemenu) # 和上面定義菜單同樣,不過此處實在File上建立一個空的菜單
  54.  
    filemenu.add_cascade(label= 'Import', menu=submenu, underline=0) # 給放入的菜單submenu命名爲Import
  55.  
     
  56.  
    # 第9步,建立第三級菜單命令,即菜單項裏面的菜單項裏面的菜單命令(有點拗口,笑~~~)
  57.  
    submenu.add_command(label= 'Submenu_1', command=do_job) # 這裏和上面建立原理也同樣,在Import菜單項中加入一個小菜單命令Submenu_1
  58.  
     
  59.  
    # 第11步,建立菜單欄完成後,配置讓菜單欄menubar顯示出來
  60.  
    window.config(menu=menubar)
  61.  
     
  62.  
    # 第12步,主窗口循環顯示
  63.  
    window.mainloop()

  測試效果:

11. Frame 窗口部件

  簡單說明:  

  Frame:框架,用來承載放置其餘GUI元素,就是一個容器,是一個在 Windows 上分離小區域的部件, 它能將 Windows 分紅不一樣的區,而後存放不一樣的其餘部件. 同時一個 Frame 上也能再分紅兩個 Frame, Frame 能夠認爲是一種容器.

  何時用:

  在好比像軟件或網頁交互界面等,有不一樣的界面邏輯層級和功能區域劃分時能夠用到,讓交互界面邏輯更加清晰。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,在圖形界面上建立一個標籤用以顯示內容並放置
  17.  
    tk.Label(window, text= 'on the window', bg='red', font=('Arial', 16)).pack() # 和前面部件分開建立和放置不一樣,其實能夠建立和放置一步完成
  18.  
     
  19.  
    # 第5步,建立一個主frame,長在主window窗口上
  20.  
    frame = tk.Frame(window)
  21.  
    frame.pack()
  22.  
     
  23.  
    # 第6步,建立第二層框架frame,長在主框架frame上面
  24.  
    frame_l = tk.Frame(frame) # 第二層frame,左frame,長在主frame上
  25.  
    frame_r = tk.Frame(frame) # 第二層frame,右frame,長在主frame上
  26.  
    frame_l.pack(side= 'left')
  27.  
    frame_r.pack(side= 'right')
  28.  
     
  29.  
    # 第7步,建立三組標籤,爲第二層frame上面的內容,分爲左區域和右區域,用不一樣顏色標識
  30.  
    tk.Label(frame_l, text= 'on the frame_l1', bg='green').pack()
  31.  
    tk.Label(frame_l, text= 'on the frame_l2', bg='green').pack()
  32.  
    tk.Label(frame_l, text= 'on the frame_l3', bg='green').pack()
  33.  
    tk.Label(frame_r, text= 'on the frame_r1', bg='yellow').pack()
  34.  
    tk.Label(frame_r, text= 'on the frame_r2', bg='yellow').pack()
  35.  
    tk.Label(frame_r, text= 'on the frame_r3', bg='yellow').pack()
  36.  
     
  37.  
    # 第8步,主窗口循環顯示
  38.  
    window.mainloop()

  測試效果:

 

12. messageBox窗口部件

  簡單說明:  

  messageBox:消息框,用於顯示你應用程序的消息框。(Python2中爲tkMessagebox),其實這裏的messageBox就是咱們平時看到的彈窗。 咱們首先須要定義一個觸發功能,來觸發這個彈窗,這裏咱們就放上之前學過的button按鈕,經過觸發功能,調用messagebox吧,點擊button按鈕就會彈出提示對話框。下面給出messagebox提示信息的幾種形式:

  1.  
    tkinter.messagebox.showinfo(title= 'Hi', message='你好!') # 提示信息對話窗
  2.  
    tkinter.messagebox.showwarning(title= 'Hi', message='有警告!') # 提出警告對話窗
  3.  
    tkinter.messagebox.showerror(title= 'Hi', message='出錯了!') # 提出錯誤對話窗
  4.  
    print(tkinter.messagebox.askquestion(title= 'Hi', message='你好!')) # 詢問選擇對話窗return 'yes', 'no'
  5.  
    print(tkinter.messagebox.askyesno(title= 'Hi', message='你好!')) # return 'True', 'False'
  6.  
    print(tkinter.messagebox.askokcancel(title= 'Hi', message='你好!')) # return 'True', 'False'

  何時用:

  在好比像軟件或網頁交互界面等,有不一樣的界面邏輯層級和功能區域劃分時能夠用到,讓交互界面邏輯更加清晰。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
    import tkinter.messagebox # 要使用messagebox先要導入模塊
  7.  
     
  8.  
    # 第1步,實例化object,創建窗口window
  9.  
    window = tk.Tk()
  10.  
     
  11.  
    # 第2步,給窗口的可視化起名字
  12.  
    window.title( 'My Window')
  13.  
     
  14.  
    # 第3步,設定窗口的大小(長 * 寬)
  15.  
    window.geometry( '500x300') # 這裏的乘是小x
  16.  
     
  17.  
    # 第5步,定義觸發函數功能
  18.  
    def hit_me():
  19.  
    tkinter.messagebox.showinfo(title= 'Hi', message='你好!') # 提示信息對話窗
  20.  
    # tkinter.messagebox.showwarning(title='Hi', message='有警告!') # 提出警告對話窗
  21.  
    # tkinter.messagebox.showerror(title='Hi', message='出錯了!') # 提出錯誤對話窗
  22.  
    # print(tkinter.messagebox.askquestion(title='Hi', message='你好!')) # 詢問選擇對話窗return 'yes', 'no'
  23.  
    # print(tkinter.messagebox.askyesno(title='Hi', message='你好!')) # return 'True', 'False'
  24.  
    # print(tkinter.messagebox.askokcancel(title='Hi', message='你好!')) # return 'True', 'False'
  25.  
     
  26.  
    # 第4步,在圖形界面上建立一個標籤用以顯示內容並放置
  27.  
    tk.Button(window, text= 'hit me', bg='green', font=('Arial', 14), command=hit_me).pack()
  28.  
     
  29.  
    # 第6步,主窗口循環顯示
  30.  
    window.mainloop()

  測試效果:

 

13. 窗口部件三种放置方式pack/grid/place

  參考來源:

The Grid Geometry Manager
The Pack Geometry Manager
The Place Geometry Manager

  1. Grid:The Grid Geometry Manager  

  grid 是方格, 因此全部的內容會被放在這些規律的方格中。例如:

  1.  
    for i in range(3):
  2.  
    for j in range(3):
  3.  
    tk.Label(window, text= 1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)

  以上的代碼就是建立一個三行三列的表格,其實 grid 就是用表格的形式定位的。這裏的參數 row 爲行,colum 爲列,padx 就是單元格左右間距,pady 就是單元格上下間距,ipadx是單元格內部元素與單元格的左右間距,ipady是單元格內部元素與單元格的上下間距。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,grid 放置方法
  17.  
    for i in range(3):
  18.  
    for j in range(3):
  19.  
    tk.Label(window, text= 1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)
  20.  
     
  21.  
    # 第5步,主窗口循環顯示
  22.  
    window.mainloop()

  測試效果:

 

  2. Pack:The Pack Geometry Manager

   咱們經常使用的pack(), 他會按照上下左右的方式排列.例如:

  1.  
    tk.Label(window, text= 'P', fg='red').pack(side='top') # 上
  2.  
    tk.Label(window, text= 'P', fg='red').pack(side='bottom') # 下
  3.  
    tk.Label(window, text= 'P', fg='red').pack(side='left') # 左
  4.  
    tk.Label(window, text= 'P', fg='red').pack(side='right') # 右

   示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,pack 放置方法
  17.  
    tk.Label(window, text= 'P', fg='red').pack(side='top') # 上
  18.  
    tk.Label(window, text= 'P', fg='red').pack(side='bottom') # 下
  19.  
    tk.Label(window, text= 'P', fg='red').pack(side='left') # 左
  20.  
    tk.Label(window, text= 'P', fg='red').pack(side='right') # 右
  21.  
     
  22.  
    # 第5步,主窗口循環顯示
  23.  
    window.mainloop()

  測試效果:

  3. Place:The Place Geometry Manager

   再接下來咱們來看place(), 這個比較容易理解,就是給精確的座標來定位,如此處給的(50, 100),就是將這個部件放在座標爲(x=50, y=100)的這個位置, 後面的參數 anchor='nw',就是前面所講的錨定點是西北角。例如:

tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=50, y=100, anchor='nw') 

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
     
  7.  
    # 第1步,實例化object,創建窗口window
  8.  
    window = tk.Tk()
  9.  
     
  10.  
    # 第2步,給窗口的可視化起名字
  11.  
    window.title( 'My Window')
  12.  
     
  13.  
    # 第3步,設定窗口的大小(長 * 寬)
  14.  
    window.geometry( '500x300') # 這裏的乘是小x
  15.  
     
  16.  
    # 第4步,place 放置方法(精準的放置到指定座標點的位置上)
  17.  
    tk.Label(window, text= 'Pl', font=('Arial', 20), ).place(x=50, y=100, anchor='nw')
  18.  
     
  19.  
    # 第5步,主窗口循環顯示
  20.  
    window.mainloop()

  測試效果:

14. 綜合練習,用戶登陸窗口例子

  編寫一個用戶登陸界面,用戶能夠登陸帳戶信息,若是帳戶已經存在,能夠直接登陸,登陸名或者登陸密碼輸入錯誤會提示,若是帳戶不存在,提示用戶註冊,點擊註冊進去註冊頁面,輸入註冊信息,肯定後即可以返回登陸界面進行登陸。

  示例代碼:

  1.  
    #!/usr/bin/env python
  2.  
    # -*- coding: utf-8 -*-
  3.  
    # author:洪衛
  4.  
     
  5.  
    import tkinter as tk # 使用Tkinter前須要先導入
  6.  
    import tkinter.messagebox
  7.  
    import pickle
  8.  
     
  9.  
    # 第1步,實例化object,創建窗口window
  10.  
    window = tk.Tk()
  11.  
     
  12.  
    # 第2步,給窗口的可視化起名字
  13.  
    window.title( 'Wellcome to Hongwei Website')
  14.  
     
  15.  
    # 第3步,設定窗口的大小(長 * 寬)
  16.  
    window.geometry( '400x300') # 這裏的乘是小x
  17.  
     
  18.  
    # 第4步,加載 wellcome image
  19.  
    canvas = tk.Canvas(window, width= 400, height=135, bg='green')
  20.  
    image_file = tk.PhotoImage(file= 'pic.gif')
  21.  
    image = canvas.create_image( 200, 0, anchor='n', image=image_file)
  22.  
    canvas.pack(side= 'top')
  23.  
    tk.Label(window, text= 'Wellcome',font=('Arial', 16)).pack()
  24.  
     
  25.  
    # 第5步,用戶信息
  26.  
    tk.Label(window, text= 'User name:', font=('Arial', 14)).place(x=10, y=170)
  27.  
    tk.Label(window, text= 'Password:', font=('Arial', 14)).place(x=10, y=210)
  28.  
     
  29.  
    # 第6步,用戶登陸輸入框entry
  30.  
    # 用戶名
  31.  
    var_usr_name = tk.StringVar()
  32.  
    var_usr_name.set( 'example@python.com')
  33.  
    entry_usr_name = tk.Entry(window, textvariable=var_usr_name, font=( 'Arial', 14))
  34.  
    entry_usr_name.place(x= 120,y=175)
  35.  
    # 用戶密碼
  36.  
    var_usr_pwd = tk.StringVar()
  37.  
    entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, font=( 'Arial', 14), show='*')
  38.  
    entry_usr_pwd.place(x= 120,y=215)
  39.  
     
  40.  
    # 第8步,定義用戶登陸功能
  41.  
    def usr_login():
  42.  
    # 這兩行代碼就是獲取用戶輸入的usr_name和usr_pwd
  43.  
    usr_name = var_usr_name.get()
  44.  
    usr_pwd = var_usr_pwd.get()
  45.  
     
  46.  
    # 這裏設置異常捕獲,當咱們第一次訪問用戶信息文件時是不存在的,因此這裏設置異常捕獲。
  47.  
    # 中間的兩行就是咱們的匹配,即程序將輸入的信息和文件中的信息匹配。
  48.  
    try:
  49.  
    with open('usrs_info.pickle', 'rb') as usr_file:
  50.  
    usrs_info = pickle.load(usr_file)
  51.  
    except FileNotFoundError:
  52.  
    # 這裏就是咱們在沒有讀取到`usr_file`的時候,程序會建立一個`usr_file`這個文件,並將管理員
  53.  
    # 的用戶和密碼寫入,即用戶名爲`admin`密碼爲`admin`。
  54.  
    with open('usrs_info.pickle', 'wb') as usr_file:
  55.  
    usrs_info = { 'admin': 'admin'}
  56.  
    pickle.dump(usrs_info, usr_file)
  57.  
    usr_file.close() # 必須先關閉,不然pickle.load()會出現EOFError: Ran out of input
  58.  
     
  59.  
    # 若是用戶名和密碼與文件中的匹配成功,則會登陸成功,並跳出彈窗how are you? 加上你的用戶名。
  60.  
    if usr_name in usrs_info:
  61.  
    if usr_pwd == usrs_info[usr_name]:
  62.  
    tkinter.messagebox.showinfo(title= 'Welcome', message='How are you? ' + usr_name)
  63.  
    # 若是用戶名匹配成功,而密碼輸入錯誤,則會彈出'Error, your password is wrong, try again.'
  64.  
    else:
  65.  
    tkinter.messagebox.showerror(message= 'Error, your password is wrong, try again.')
  66.  
    else: # 若是發現用戶名不存在
  67.  
    is_sign_up = tkinter.messagebox.askyesno( 'Welcome! ', 'You have not sign up yet. Sign up now?')
  68.  
    # 提示需不須要註冊新用戶
  69.  
    if is_sign_up:
  70.  
    usr_sign_up()
  71.  
     
  72.  
    # 第9步,定義用戶註冊功能
  73.  
    def usr_sign_up():
  74.  
    def sign_to_Hongwei_Website():
  75.  
    # 如下三行就是獲取咱們註冊時所輸入的信息
  76.  
    np = new_pwd.get()
  77.  
    npf = new_pwd_confirm.get()
  78.  
    nn = new_name.get()
  79.  
     
  80.  
    # 這裏是打開咱們記錄數據的文件,將註冊信息讀出
  81.  
    with open('usrs_info.pickle', 'rb') as usr_file:
  82.  
    exist_usr_info = pickle.load(usr_file)
  83.  
    # 這裏就是判斷,若是兩次密碼輸入不一致,則提示Error, Password and confirm password must be the same!
  84.  
    if np != npf:
  85.  
    tkinter.messagebox.showerror( 'Error', 'Password and confirm password must be the same!')
  86.  
     
  87.  
    # 若是用戶名已經在咱們的數據文件中,則提示Error, The user has already signed up!
  88.  
    elif nn in exist_usr_info:
  89.  
    tkinter.messagebox.showerror( 'Error', 'The user has already signed up!')
  90.  
     
  91.  
    # 最後若是輸入無以上錯誤,則將註冊輸入的信息記錄到文件當中,並提示註冊成功Welcome!,You have successfully signed up!,而後銷燬窗口。
  92.  
    else:
  93.  
    exist_usr_info[nn] = np
  94.  
    with open('usrs_info.pickle', 'wb') as usr_file:
  95.  
    pickle.dump(exist_usr_info, usr_file)
  96.  
    tkinter.messagebox.showinfo( 'Welcome', 'You have successfully signed up!')
  97.  
    # 而後銷燬窗口。
  98.  
    window_sign_up.destroy()
  99.  
     
  100.  
    # 定義長在窗口上的窗口
  101.  
    window_sign_up = tk.Toplevel(window)
  102.  
    window_sign_up.geometry( '300x200')
  103.  
    window_sign_up.title( 'Sign up window')
  104.  
     
  105.  
    new_name = tk.StringVar() # 將輸入的註冊名賦值給變量
  106.  
    new_name.set( 'example@python.com') # 將最初顯示定爲'example@python.com'
  107.  
    tk.Label(window_sign_up, text= 'User name: ').place(x=10, y=10) # 將`User name:`放置在座標(10,10)。
  108.  
    entry_new_name = tk.Entry(window_sign_up, textvariable=new_name) # 建立一個註冊名的`entry`,變量爲`new_name`
  109.  
    entry_new_name.place(x= 130, y=10) # `entry`放置在座標(150,10).
  110.  
     
  111.  
    new_pwd = tk.StringVar()
  112.  
    tk.Label(window_sign_up, text= 'Password: ').place(x=10, y=50)
  113.  
    entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show= '*')
  114.  
    entry_usr_pwd.place(x= 130, y=50)
  115.  
     
  116.  
    new_pwd_confirm = tk.StringVar()
  117.  
    tk.Label(window_sign_up, text= 'Confirm password: ').place(x=10, y=90)
  118.  
    entry_usr_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show= '*')
  119.  
    entry_usr_pwd_confirm.place(x= 130, y=90)
  120.  
     
  121.  
    # 下面的 sign_to_Hongwei_Website
  122.  
    btn_comfirm_sign_up = tk.Button(window_sign_up, text= 'Sign up', command=sign_to_Hongwei_Website)
  123.  
    btn_comfirm_sign_up.place(x= 180, y=120)
  124.  
     
  125.  
    # 第7步,login and sign up 按鈕
  126.  
    btn_login = tk.Button(window, text= 'Login', command=usr_login)
  127.  
    btn_login.place(x= 120, y=240)
  128.  
    btn_sign_up = tk.Button(window, text= 'Sign up', command=usr_sign_up)
  129.  
    btn_sign_up.place(x= 200, y=240)
  130.  
     
  131.  
    # 第10步,主窗口循環顯示
  132.  
    window.mainloop()

  測試效果:

15. 其餘部件後續再補充...

 注:不一樣電腦可能配置環境略有不一樣,若有小錯誤能夠本身調試一下。

相關文章
相關標籤/搜索