5.組件樣式
所有Tkinter標準組件提供了一組基本的“樣式”選項,允許你修改每個組件的燕子、字體和其他視覺方面
顏色
大多數標準組件允許您使用背景色和前景色指定組件的顏色和文本的顏色
你可以用顏色名的辦法,或者明確的使用RGB組件的方式
顏色名:
Tkinter包含一個顏色數據庫,這個數據庫保存着顏色名字和RGB值的對應關係,
這個數據庫不但包括常見的顏色(紅色、綠色、藍色),而且還包括一些奇異的顏色
Moccasin、PeachPuff等
在linux視窗用戶圖形界面下,顏色名稱在X server下定義的。你可能可以通過查看
一個名爲xrgb.txt的文檔,列出顏色名和RGB值的關係。在windwos和Macintosh系統中
顏色名在Tk中定義
如果在windows操作系統,你也可以使用windows系統顏色(這些顏色可用戶可以通過
控制面板修改),如下:
SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, SystemButtonFace, SystemButtonHighlight, SystemButtonShadow, SystemButtonText, SystemCaptionText, SystemDisabledText, SystemHighlight, SystemHighlightText, SystemInactiveBorder, SystemInactiveCaption, SystemInactiveCaptionText, SystemMenu, SystemMenuText, SystemScrollbar, SystemWindow, SystemWindowFrame, SystemWindowText.
在Macintosh中,以下系統顏色是合法的:
SystemButtonFace, SystemButtonFrame, SystemButtonText, SystemHighlight, SystemHighlightText, SystemMenu, SystemMenuActive, SystemMenuActiveText, SystemMenuDisabled, SystemMenuText, SystemWindowBody.
顏色名比較遲鈍,許多(但不是全部)顏色名允許中間有空格
比如“lightblue”和“light blue” 和“Light Blue”表示同一種顏色
RGB表示法
如果你想明確的表示一種顏色,你可以這樣命名
#RRGGBB
RR、GG、BB都是16進制的紅、綠、藍。比如以下方法顯示了你如何
講RGB三原色轉換爲TK顏色
tk_rgb = "#%02x%02x%02x" % (128, 192, 200)
Tk還支持形式“ #RGB ”和 “ #RRRRGGGGBBBB ”來分別指定具有16和65536級別的每個值
您可以使用winfo_rgb小部件方法將顏色字符串(名稱或RGB規範)轉換爲3元組:
rgb = widget.winfo_rgb(“red”)
red,green,blue = rgb [0] / 256,rgb [1] / 256,rgb [2]
請注意,winfo_rgb返回16位RGB值,範圍從0到65535.要將它們映射到更常用的0-255範圍,必須將每個值除以256(或將它們向右移位8位)。
字體
組件允許你使用多種字體顯示文本,而且允許你指定用哪種字體。所有的組件
都提供默認字體,你很少必須給那些簡單的像標籤和按鈕這種控件指定字體
一般指定字體要用font這個選項,Tkinter支持許多種字體描述方式
.字體描述符
.用戶自定義的字體名字
.系統字體
.X 字體描述符
在Tk 8.0千,只能使用X 字體描述符
字體描述符:
從Tk8.0開始Tkinter支持獨立於系統平臺的字體描述符你可以用元祖的方式
表示一個字體,這個元組包含(字體名,高度,和一種或多種風格)比如:
("Times", 10, "bold")
("Helvetica", 10, "bold italic")
("Symbol", 8)
如果字體名字不包含空格的話,你也可以用一個字符串來表示字體描述符比如:
"Times 10 bold""Helvetica 10 bold italic""Symbol 8"
如果字體名中包含空格的話,你必須用元組的方法來描述
風格: normal, bold, roman, italic, underline,overstrike
字體命名:
此外,Tk8.0允許你自定義命名字體以及在你的組件中使用這些字體
在tkFont模塊中提供了Font類,這個類允許你創建字體的實例。
tkFont.Font(family="Times", size=10, weight=tkFont.BOLD)
tkFont.Font(family="Helvetica", size=10, weight=tkFont.BOLD,
slant=tkFont.ITALIC)
tkFont.Font(family="Symbol", size=8)
如果你用config方法修改命名過了的字體,那麼所有使用這個字體的組件都會自動更新
Font結構體支持以下選項
family、size、weight(NORMAL or BOLD)、slant(NORMAL、ITALIC)
、underline(1 is true,defalut 0)、overstrike
系統字體
Tk同樣支持系統字體,在linux X 下,通常有這些字體--fixed、6x10等
在windows下,包括 ansi, ansifixed, device, oemfixed, system, and systemfixed
在Macintosh包括application和system
格式化文本
如果要多行文本加\n
默認情況下文本居中,你也可以用justify參數,設置爲 LEFT \RIGHT. 默認 CENTER.
你也可以使用 wraplength 參數來設置最大寬度
邊框
所有的組件都有邊框,不過有些組件默認邊框不可見,邊框包括3D浮雕效果和焦點高亮效果
浮雕效果:
borderwidth 邊框寬度,單位是像素,大多數組件的默認寬度是1到2個想租。
relief 這個參數控制如何繪製3D邊框,可以設置爲以下值 SUNKEN, RAISED, GROOVE, RIDGE, and FLAT
焦點高亮
當組件獲得焦點後,如何表示獲得焦點了。一般邊框變成浮雕狀,以下是額外的邊框
highlightcolor
hightlightbackgroud
highlighthickness
鼠標
當鼠標移動到組件的範圍內,顯示的鼠標樣式,如果不設置,那麼和父窗體一樣
有以下可選
x_cursor | bottom_right_corner | coffee_mug | double_arrow | gumby |
arrow | bottom_side | cross | draft_large | hand1 |
based_arrow_down | bottom_tee | cross_reverse | draft_small | hand2 |
based_arrow_up | box_spiral | crosshair | draped_box | heart |
boat | center_ptr | diamond_cross | exchange | icon |
bogosity | circle | dot | fleur | iron_cross |
bottom_left_corner | clock | dotbox | gobbler |
例子:
from tkinter import *
root=Tk()
myButton1=Button(root,text='hello')
myButton1.pack()
myButton2=Button(root,text='huang')
myButton2.pack()
tk_rgb1 = "#%02x%02x%02x" % (128, 255, 255)
tk_rgb2 = "#%02x%02x%02x" % (0, 192, 200)
myButton1.config({"text":"hello,xie","bg":tk_rgb1,"fg":tk_rgb2,"font":"Times 10 bold","relief":"raised"})
myButton2.config({"text":"hello,huang","bg":tk_rgb1,"fg":tk_rgb2,"font":"Times 10 bold","relief":"flat","cursor":"circle"})
root.mainloop()