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"

如果字体名中包含空格的话,你必须用元组的方法来描述

风格: normalboldromanitalicunderline,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下,包括 ansiansifixeddeviceoemfixedsystem, and systemfixed

在Macintosh包括application和system

格式化文本

如果要多行文本加\n

默认情况下文本居中,你也可以用justify参数,设置为 LEFT \RIGHT. 默认 CENTER.

你也可以使用 wraplength 参数来设置最大宽度


边框

所有的组件都有边框,不过有些组件默认边框不可见,边框包括3D浮雕效果和焦点高亮效果

浮雕效果:

borderwidth 边框宽度,单位是像素,大多数组件的默认宽度是1到2个想租。

relief 这个参数控制如何绘制3D边框,可以设置为以下值 SUNKENRAISEDGROOVERIDGE, and FLAT

焦点高亮

当组件获得焦点后,如何表示获得焦点了。一般边框变成浮雕状,以下是额外的边框

highlightcolor

hightlightbackgroud

highlighthickness

鼠标

当鼠标移动到组件的范围内,显示的鼠标样式,如果不设置,那么和父窗体一样

有以下可选

x_cursorbottom_right_cornercoffee_mugdouble_arrowgumby
arrowbottom_sidecrossdraft_largehand1
based_arrow_downbottom_teecross_reversedraft_smallhand2
based_arrow_upbox_spiralcrosshairdraped_boxheart
boatcenter_ptrdiamond_crossexchangeicon
bogositycircledotfleuriron_cross
bottom_left_cornerclockdotboxgobbler


例子:

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()