第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()
結果:
Record the process of your own
def print_smallest_and_largest