開篇
上一講,主要講的是 python自帶可視化接口工具tkinter的窗口創建,算是整個系列的第一講。如果沒看過的同學,可以點擊下方鏈接。
寫這個教程的初衷是將自己這段時間學習使用tkinter的心得分享出來,給需要或者想要學習tkinter這個組件的同學參考使用。
這一講,主角是tkinter組件團中的‘頭號網紅‘ - 標籤 (Label)
標籤(Label)組件
上一講中的窗口建立好之後,就需要根據設計要求往窗口中添加組件了。tkinter中有幾乎滿足日常要求的所有組件。標籤組件應該是其中出場最為頻繁的組件之一了。
在tkinter模塊下,可以使用tk.Label 或者ttk.Label去創建Label插件,功能幾乎一樣。ttk類是後續的tk類的補強,增添了很多組件。推薦使用ttk類。
如下代碼就可以創建一個最簡單的標籤組件 LB_1。
<code>import tkinter as tk
import tkinter.ttk as ttk
window = tk.Tk()
window.title('逃學聯盟')
window.resizable(True, True)
window.minsize(200, 100)
window.maxsize(1000, 500)
LB_1 = ttk.Label(window, text='逃學聯盟', font='微軟雅黑, 12')
LB_1.pack()
window.mainloop()/<code>
生成標籤組件的代碼如下:
ttk.Label(上一級容器組件,可選參數)
上一級容器組件:在創建組件的時候,需要指定組件放置在哪一個容器組件中,比如上例中創建的LB_1是直接放在窗口下的。
可選參數: 每一個組件都會提供很多參數用來設置組件的外觀或者顯示內容。不同組件的參數大差不差。可以通過
組件對象名.keys() 查看組件下的可選參數。我們一個一個來看一下這些參數。
<code>'background':背景色;
'foreground':前景色;
'font':字體設置,可以設置字體,字號,粗體/斜體等;
'borderwidth':邊框寬度;
'relief':標籤邊框的樣式,默認是tk.FLAT;
'anchor':標籤的空間位置;
'justify':標籤組件中文字的對齊方式,tk.LEFT, tk.RIGHT, tk.CENTER; 默認是居中;
'wraplength':如果文字過長,一行最多容納的字符寬度,單位是像素;
'takefocus':如果設置為 True, 控件將可以獲取焦點. 默認為 False;
'text': 標籤內文字;
'textvariable':顯示內容以變量形式傳入;
'underline':對文字添加下劃線,可以指定哪幾個文字下方有下劃線;
'width':標籤寬度;
'image':添加圖片;
'compound':如果標籤內同時含有圖片和文字,圖片與文字的相對位置關係;
'padding':文字與標籤邊框的間距,單位像素;
'state':標籤狀態,默認為tk.NORMAL;
'cursor':當鼠標光標在標籤上方時的外形;/<code>
如上例中,在創建LB_1標籤的時候,我們設置了顯示內容為“逃學聯盟”,字體為微軟雅黑,字號為12。
注意:創建組件之後,需要將組件放進 上一級容器組件中,這就是 pack()方法的作用。tkinter模塊中有pack,grid和place三種排放組件的方式,下一講主要講講這個。
實例一:創建電子鐘
通過實例上手可以快速學習編程語言。下面我們就用這兩講學到的窗口和標籤組件創建一個自動刷新的電子鐘。
<code>import tkinter as tk
import tkinter.ttk as ttk
from time import strftime
window = tk.Tk()
window.title('電子時鐘')
window.resizable(True, True)
def get_time():
local_time = strftime('%H:%M:%S %p')
LB_1.config(text=local_time)
window.after(1000, get_time)
return
LB_1 = ttk.Label(window, font=('微軟雅黑', 20, 'bold'), anchor=tk.CENTER, background='#008CBA', foreground='white')
LB_1.pack(fill=tk.BOTH, expand=True)
get_time()
window.mainloop()/<code>
strftime 方法是默認將當地時間轉換成 設定的顯示形式,如上所示'%H:%M:%S %p‘。好奇的同學可以自行查找學習。
- 創建標籤 LB_1,字體為微軟雅黑,字號20,粗體;
- anchor將標籤在窗口中居中顯示;
- background:背景色為'#008CBA';
- foreground:前景色或者可以看做字體顏色為白色; (以上使用了兩種不同的方式設置顏色)
- get_time函數中,window.after (上一講說過)每隔1000毫秒讀取一次時間,並刷新LB_1的文字顯示。同時,時間顯示為居中顯示justify=tk.CENTER。
以上我們就製成了一個電子時鐘,美觀大方。一個例子我們就熟悉6鍾參數;
實例二:relief 參數詳解
<code>import tkinter as tk
import tkinter.ttk as ttk
window = tk.Tk()
window.title('relief')
window.resizable(True, True)
relief_list = ['flat','groove', 'raised', 'ridge', 'solid', 'sunken']
for i in relief_list:
tk.Label(window, text=i, relief=i, padx=5, pady=5).pack(side=tk.LEFT)
window.mainloop()/<code>
relief參數的樣式有'flat','groove', 'raised', 'ridge', 'solid', 'sunken'。默認是‘flat',就是沒有格式。
其中特別注意的是,relief=‘groove’和relief=tk.GROOVE都可以用來設置relief參數。如上例中,我們依次創建了不同relief樣式的圖標。大家以後可以根據需要設置。
實例三:anchor參數
<code>import tkinter as tk
import tkinter.ttk as ttk
from time import strftime
window = tk.Tk()
window.title('電子時鐘')
window.minsize(400, 200)
window.resizable(True, True)
def get_time():
local_time = strftime('%H:%M:%S %p')
LB_1.config(text=(local_time))
window.after(1000, get_time)
return
LB_1 = ttk.Label(window, font=('微軟雅黑', 20, 'bold'), anchor=tk.NW, background='#008CBA', foreground='white')
LB_1.pack(fill=tk.BOTH, expand=True)
get_time()
window.mainloop()/<code>
如果我們將電子時鐘的anchor參數設置為tk.NW,則時間會顯示在左上角。如下圖所示:
實例四:電子相冊
電子相冊這個實例主要用來熟悉image和compound這兩個參數。 由於篇幅問題,下一講開我們會以電子相冊實例開篇。
總結
工欲善其事必先利其器,我們在瞭解學習一個模塊的時候,一定要多做例子,這樣才能更快更準確。
謝謝大家,喜歡的話就訂閱 ‘逃學博士’並轉發!
閱讀更多 逃學博士 的文章