第7章 框架控件(Frame 與 LabelFrame)
框架控件(Frame和LabelFrame),在屏幕上創建一塊矩形區域,多作為容器來布局其他控件,比如標簽、按鈕、輸入框等,都可用框架來布局。框架控件一般在布局很複雜的情況下使用,尤其是有很多控件需要使用的時候。可以把框架控件當成一種容器,裏面可以存儲各種控件。想象一下家裏面衣櫃的隔斷或者架子,可以把不同衣物很好的歸類放置,框架控件的作用就是這個效果。如果沒有框架控件,很多複雜的布局難以完成或實現。
7.1 屬性列錶
具體屬性列錶如下:
7.1.1 background(bg)
background 的屬性是用來設置框架框架的背景顏色的。bg是縮寫。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',width=100,height=100)
b1.pack()
root.mainloop()
結果:
框架控件就是在屏幕上創建一塊矩形區域,用來容納其它的控件。
7.1.2 borderwidth(bd)
borderwidth定義框架控件的邊框寬度。bd是縮寫形式。默認的邊框寬度是0。可以通過設置該屬性調整邊框的寬度。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',bd=3)
b1.pack()
b2=tk.Entry(b1,width=20)
b2.pack()
root.mainloop()
結果:
說明:輸入框邊上的藍色部分就是設置了邊框之後的效果。如果沒有設置邊框的話,是沒有藍色部分的。
7.1.3 class
給框架控件指定一個class名稱。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',bd=3,class_='good')
b1.pack()
b2=tk.Entry(b1,width=20)
b2.pack()
root.mainloop()
說明:因為class是Python的關鍵字,所以在這裏要加上一個下劃線’_’。
7.1.4 colormap
指定顏色映射。有些顯示器只支持256種顏色(有些甚至更少)。這種顯示通常提供一個顏色映射來指定使用哪256種顏色。此選項允許您指定用於此幀的顏色映射及其子部件。
默認情況下,一個新框架使用與其父相同的顏色映射。使用此選項,您可以重用另一個窗口的顏色映射(此窗口必須比特於同一個屏幕上,且具有相同的視覺特性)。創建框架後,不能更改此選項。
7.1.5 container
container = True 的時候,不能在其中創建子控件。False的時候可以。如果為true,則此frame是容器小部件。默認為false。
7.1.6 cursor
鼠標經過框架控件時的形狀,更多的信息見3.3.6節。
7.1.7 height 和width
設置框架控件的高和寬,單比特是像素。不過如果有子控件,系統會根據子控件的大小來自動計算框架控件的大小,height和width屬性就沒有用了。
7.1.8 highlightbackground,highlightcolor和highlightthickness
這三個屬性是配合使用的。highlightbackground是框架控件沒有獲得輸入焦點時的邊框顏色。如圖一所示。highlightcolor是框架控件獲得輸入焦點時候的邊框顏色。如圖二所示。highlightthickness定義了邊框的寬度。如果不定義這個邊框的寬度,那麼就不會顯示highlightbackground和highlightcolor定義的顏,因為highlightthickness默認值是0。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',width=100,height=100,
highlightbackground='red',
highlightcolor='green',
highlightthickness=5,takefocus=1)
b1.pack()
b2=tk.Entry(root)
b2.pack()
root.mainloop()
結果:

7.1.9 padx和pady
設置框架控件的內邊距。見前面章節的描述。
7.1.10 relief
設置邊框的效果。具體的說明見3.3.5節。如果不定義borderwidth,則沒有relief沒有任何的效果。也就是說relief是對邊框的美化效果,邊框的寬度為0,那麼relief自然就沒有任何作用。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',border=10,width=100,
height=100,relief=tk.GROOVE)
b1.pack()
root.mainloop()
結果:
7.1.11 takefocus
這個屬性是設置框架控件能夠獲得輸入焦點。takefocus=True錶示可以獲得輸入焦點,takefocus=False錶示不可以。默認值是False。
7.1.12 visual
定義如何顯示框架。取值為:
best, directcolor, grayscale, greyscale, pseudocolor, staticcolor, staticgray, staticgrey, truecolor, 和default
不過很多的取值是針對過去低端的顯示設備。目前只有best,truecolor和default還可以取值。其他的取值為產生異常。
7.2 LabelFrame(標簽框架控件)
LabelFrame標簽框架控件,比Frame框架控件多了一個標簽,可以提示放置在框架內的子控件的用途。
標簽框架控件比框架控件多了5個屬性,都是跟標簽有關的。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.LabelFrame(root,width=100,height=100,
text='標簽',padx=10,pady=10)
b1.pack()
b2=tk.Entry(b1)
b2.pack()
root.mainloop()
結果:
7.2.2 font
設置標簽中文本的字體,只能設置一種字體。詳細的說明見3.3.3節。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.LabelFrame(root,width=100,height=100,
text='標簽',padx=10,pady=10,
font=('times',20,'bold'))
b1.pack()
b2=tk.Entry(b1)
b2.pack()
root.mainloop()
結果:
7.2.3 foreground
設置標簽中的前景(文本)顏色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.LabelFrame(root,width=100,height=100,
text='標簽',padx=10,pady=10,
foreground='red')
b1.pack()
b2=tk.Entry(b1)
b2.pack()
root.mainloop()
結果:
7.2.4 labelanchor
設置在何處顯示標簽。有12個比特置:e, en, es, n, ne, nw, s, se, sw, w, wn, 和 ws。就是按照東南西北的方比特組合,東南西北的定義遵循地圖的定義,就是左東右西,上北下南。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.LabelFrame(root,width=100,height=100,text='標簽比特置:e',padx=10,pady=30,labelanchor='e')
b1.pack()
b2=tk.Entry(b1)
b2.pack()
root.mainloop()
結果:
7.2.5 labelwidget
默認的情況下,使用的是標簽控件來顯示提示信息。但是也可以替換成其他的控件,比如按鈕、輸入框等。使用的方法是先定義一個控件,然後賦值給labelwidget就可以了。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b3=tk.Button(root,text='按鈕')
b1 = tk.LabelFrame(root,width=100,
height=100,labelwidget=b3)
b1.pack()
b2=tk.Entry(b1)
b2.pack()
root.mainloop()
結果:
Python crawler, record the crawling process, list data, page turning, post mode, save dictionary
Record the process of your own
Python determines whether it is an even number and outputs the maximum and minimum values
def print_smallest_and_largest