python_ocr文字識別小工具學習筆記 1.4 (TKinter得學習使用之基礎學習——標籤、組件介紹與按鈕)

python_ocr文字識別小工具學習筆記 1.4 (TKinter得學習使用之基礎學習——標籤、組件介紹與按鈕)

組件

  1. 如果⼤家有過 Windows GUI 編程經驗,那麼對於 控件 ⼀次 ⼀定不會陌⽣,其實組 件和控件是⼀回事,在這⾥我們不加以區分。
  2. 組件的英⽂表述是 widget ,我們常⻅的按鈕,⽂本 框等等都可以當做組件。
  3. 我們可以爲⼀個窗⼝增加若⼲組件來豐富該窗⼝的功能, 我們往往需要指定這個組 件的⼤⼩和位置,我們還需要通過編程的⽅式,來指定該組件能完成什麼功能。

Label 類

標籤

  1. 所謂 標籤 ,就是貼在物品前⾯的⼀個簡短的說明, 它⽤於說明⼀些⽂字信息。
  2. 標籤可以說是最簡單的窗⼝組件了,它不需要執⾏任何功能,只是⽤來顯示信息。
  3. 下⾯是代碼示例:
from tkinter import * 
root = Tk() 
root.wm_title("這是⼀個Tkinter程序窗⼝標題") 
wl= Label(root, text = "歡迎") 
wl.pack() 
root.mainloop()

演示效果

代碼分析

1.這⾥的 Label 是⼀個類,可以在 init.py ⽂件⾥查看 相應的源代碼。
2. wl 是⼀個 Label 的實例,它有⼀個 text 屬性 ,⽤來指定 它的⽂本內容。
3. 3. 該類的源代碼也⾮常簡單,它的源代碼截圖:

在這裏插入圖片描述
4. ⼤家可以看到它的標準屬性,⽐如有 background , font , bitmap , padx , relief 等等, 還有 underline 等等。
5. 該類有個 pack ⽅法,沒錯,這個 pack ⽅法我們後⾯會 講,⼤家可以理解爲它的作 ⽤就是找個合適的位置進⾏放置即可,即 pack() 之後就選定位置放上去了。
6. 這⾥的初始化的時候,需要先指定 root,是說 wl 這個組 件是在 root 這個窗⼝的,不 是屬於別的窗⼝的,以後我們 有了多窗⼝的應⽤程序,不會混淆。

Widget 類

  1. 我們上⾯發現,Label 類是繼承⾃ Widget 類的,並且⾃ ⼰只有⼀個⽅法,就是⽤來 初始化⾃身的,那麼要想徹底 理解 Label,就必須徹底理解 Widget。
  2. 我們找到了 Widget 的代碼,發現它更加短⼩,甚⾄連個 ⽅法都沒有,下⾯是 Widget 的截圖:

在這裏插入圖片描述
3. 通過這個註釋,我們可以理解如下:它是⼀個可以指定 位置並且可以使⽤ pack , place 和 grid 來佈局管理的窗⼝ 組件。
4. 然後我們找到 BaseWidget ,發現它的代碼也很短⼩,代 碼截圖如下:
在這裏插入圖片描述
5. 該類繼承⾃ Misc ,包含了四個函數,函數的功能通過名 字就可以知道了。⾄於Misc 類,我們後⾯會講解的。
Misc其實是英⽂ Miscellaneous 的前四個字⺟,雜項、混合體、⼤雜燴的意思。在軟件⾥ 經常可以看到與misc相關的⽂件或函數名,使⽤misc來命名主要是表示該⽂件⽬前還沒 歸類好,不知道將它歸到哪個⽅⾯或者放置在哪個地⽅⽐較好,所以暫時⽤misc。

多標籤的應⽤程序

  1. 如果我們想要多個標籤,該怎麼辦呢?
  2. 很簡單,只需要聲明多個標籤的實例,然後分別 pack 到 窗⼝上即可。
  3. 下⾯是使⽤了三個標籤的代碼截圖:
from tkinter import * 
root = Tk() 
root.wm_title("這是⼀個Tkinter程序窗⼝標題") 
w1 = Label(root, text = "歡迎", background = "white") 
w2 = Label(root, text = "好好學習,天天向上!", background = "green") 
w3 = Label(root, text = "輕鬆愉快,就選Python!", background = "red") 
w1.pack() 
w2.pack() 
w3.pack() 
root.mainloop()

組件講解以及按鈕

tkinter 的核⼼組件

  1. 在 Python 的 tkinter 中,有 21 個核⼼組件,它們提供 了最基本的功能,雖然簡單, 因爲使⽤頻率較⾼,因此特 別重要。
  2. 這 21 個核⼼組件是 : Toplevel、Label、Button、 Canvas、Checkbutton、Entry、 Frame、LabelFrame、 Listbox、Menu、Menubutton、Message、OptionMenu、 PaneWindow 、 Radiobutton 、 Scale 、Scrollbar 、Spinbox 、Text、Bitmap、 Image。

組件的使⽤

  1. 各個組件都有相應的類,我們可以通過⾯向對象的⽅式 去使⽤它們。
  2. 這些組件的使⽤也很相似,在實例化這些組件的時候, 第⼀個參數都是⽗窗⼝或者 ⽗組件,後⾯跟着的就是該組 件的⼀些屬性,⽐如上⾯我們學到的 Label 的 text 屬性和 background 屬性。
  3. 多個組件的位置控制⽅式也很相似,我們可以⽤ pack ⽅法來進⾏簡單的佈局,具體 的個例我們後⾯再說。
  4. 組件也會有些⽅法是共⽤的,⽐如 configure ⽅法來設置屬性等等。

按鈕

1.按鈕也是⾮常重要的組件, 按鈕的重要性在於它可以執⾏相應 的功能。 2. 按鈕的英⽂表述是 button ,它隨處可⻅,當我們單 擊的時候,它可以執⾏相應的功 能。
3. 按鈕在 tkinter 中有⼀個類專⻔負責它,叫做 Button ,該類也⾮常簡短。
在這裏插入圖片描述

按鈕與功能的綁定

  1. 上⽂說到,按鈕可以執⾏相應的功能,這⾥的功能我們 可以理解爲⼀個函數,或者 這些功能通過相應的函數去實 現。
  2. 綁定⽅式通常有如下⼏種:第⼀種,在按鈕組件被聲明 的時候⽤ command 屬性聲 明, command 屬性接受⼀個函數名, 注意函數名不要加雙引號。第⼆種,使⽤ bind ⽅法,該⽅ 法是 Misc 這個類的⼀個⽅法,下⾯我們仔細講解。

1. 第⼀種⽅法綁定事件

我們要完成的功能是我們按下這個按鈕的時候,就會在 窗⼝上增加⼀個 Label,它顯 示“我愛 python”。 代碼示例

from tkinter import * 
def myLabel(): 
	global py, i 
	s = Label(py, text = "輕鬆愉快,就選Python! 重要的事情說 %d 遍!" % i) 
	s.pack() 
	i+=1 # 每次點擊後,i的值會⾃增1 
py = Tk() 
i = 1 # 全局變量i 初始化爲 1 
b = Button(py, text = "Python", command = myLabel) 
b.pack() 
py.mainloop()

運⾏結果:(⼀開始是隻有⼀個按鈕的,點擊⼀下,就會在這個窗⼝上多⼀個標籤,下⾯ 是我點擊了三次之後的截圖):
在這裏插入圖片描述

代碼解讀
  1. 其實很簡單,這⾥只需要注意 command 屬性後⾯不要加任何的標點符號。
  2. 這⾥的 myLabel 函數中,使⽤了全局的 py 和 i 變量,需要注意。

2. 第⼆種⽅式綁定事件

下⾯使⽤第⼆種⽅式來綁定事件,這個事件完成同樣的功能。
代碼示例:

from tkinter import * 
def myLabel(event): # 這⾥多了⼀個event參數⽤來接收 
	global py, i 
	s = Label(py, text = "輕鬆愉快,就選Python! 重要的事情說 %d 遍!" % i) 
	s.pack() 
	i+=1 
py = Tk() 
i = 1 
b = Button(py, text = "Python") # command = myLabel ⽊有了 
b.bind("<Button-1>", myLabel) # 多了這⼀句 
b.pack() 
py.mainloop()

運⾏結果:(和第⼀種⽅法的結果⼀樣)

代碼解讀:

  1. bind這個⽅法是在 Misc 類中的,可以接受三個參數,但是本例中我們只傳遞了兩個 參數。

  2. 第⼀個參數可能對剛使⽤它的⼈來說有點複雜,常⻅的⿏標左鍵單擊如下: <Button- 1> (也就是上⾯的代碼⽤到的),或者 等。

  3. 第⼆個參數可以是⼀個函數名,記住,不要加任何的標 點符號,否則運⾏時會報錯 的。

  4. 使⽤ bind 函數的時候,第⼆個參數是⼀個函數名,該函數必須接受⼀個參數,即表 示該事件。 這個參數通常⽤ event 來表示,如果我們調⽤的函數不接 受任何參數, 則會報錯如下 : TypeError: myLabel() takes no arguments (1 given)
    bind的第⼀個參數是⽤字符串包含的事件類型,它採⽤的描述⽅式是:

    1. 這⾥的 MODIFIER 即鍵盤或者⿏標修飾符,它的全部取值如下: Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4, Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,B3, Alt, Button4, B4, Double, Button5, B5 Triple , Mod1, M1

      2.TYPE 表示類型,它的全部取值如下: Activate, Enter, Map, ButtonPress, Button, Expose, Motion, ButtonRelease, FocusIn, MouseWheel, Circulate, FocusOut, Property, Colormap, Gravity Reparent, Configure, 18
      組件介紹與按鈕 KeyPress, Key, Unmap, Deactivate, KeyRelease Visibility, Destroy,Leave

    2. DETAIL 表示細節,其實也就是對第⼆個參數的⼀些輔助說明。

設置屬性

下⾯我們可以設置⼀些屬性,這些東⻄隨着⼤量的代碼示例,⼤家會接觸不少的。 ⽐如我們可以設置背景⾊,這⾥直接設置屬性,代碼截 圖:

from tkinter import * 
py = Tk() 
b1 = Button(py, text = "heloop") 
b1["width"] = 20 
b1["height"] = 4 
b1.pack() 
b2 = Button(py, text = "Python") 
b2["width"] = 20 
b2["background"] = "white" 
b2.pack() 
py.mainloop()

總結

  1. 關於按鈕,我們重點理解的就是它如何和事件進⾏綁定的。
  2. 當然,使⽤⼀些其他屬性來美化按鈕也很重要。
  3. 下⾯要講⼀講佈局⽅⾯的東⻄了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章