属性字典
任何组件的属性配置实际上都是一个字典。该字典中,key就是属性选项的名称,value则是5元组,分别为:选项名称、数据库中的选项名称(Database Name)、数据库中的选项类(Database Class)、默认值、当前值。如:'background': ('background', 'background', 'Background', <string object: 'SystemButtonFace'>, 'SystemButtonFace')
,当然重点关注最后两个字段。不过对于bg
这种简写,value则是2元组,分别为该简写的选项名称以及其对应的选项全名,如:'bg': ('bg', '-background')
。此外,使用cget(option)
可以直接获取到指定选项当前的设置值。keys()
方法则为获取该组件所有可以配置的选项名称。
属性设置方法
组件的样式和作用往往就通过设置各种属性来实现,设置组件各种属性的方法也有很多。
初始化时设置
首先可以在初始化组件的时候就将属性作为关键字参数批量加入,如:
btn = tk.Button(root, fg="red", bg="blue")
字典方式设置
之前提到,任何组件的属性配置实际上都是一个dict
,因此在组件对象构建后,可以直接以字典的方式访问或修改字典对应的设置,如:
btn["fg"] = "red"
btn["bg"] = "blue"
注意每通过该方式修改一次就进行一次tk命令调用,较为浪费。
config方法设置
config()
或configure()
函数不带参数调用时就是获取该组件的配置字典。而带有关键字参数调用时就是对属性的设置。每次调用该方法进行了一次tk命令调用,但该方法调用一次可以同时设置多个参数,因此较为高效。如:
btn.config(fg="red", bg="blue")
标准属性
尽管有很多组件,不同的组件也有不同的属性,但一些标准属性是大部分组件都会用到的,可以在Tk官网上查找到关于标准属性的说明文档。在此记录一些常用的:
background
或bg
,foreground
或fg
:对应组件的背景色和前景色,前景色往往就是指文字颜色;borderwidth
或bd
:边框宽度,正整数,以像素为单位;relief
:定义组件的边框样式,有"raised", “sunken”, “flat”, “groove”, and “ridge”;activebackground
,activeforeground
,activeborderwidth
:组件在active
状态时的背景色、前景色和边框宽度,active
状态就是指鼠标指向该组件并按下鼠标左键的时候;disabledforeground
:组件在disable
状态时的前景色;text
:要在组件中展示的文本字符串;font
:文字的字体,常用一个形如'fontname fontsize fontstyles'
的字符串表示,如'微软雅黑 12 bold'
。其中字体名称必须,后面的参数则可选。字体大小为正数时单位为点,负数时单位为像素;bitmap
:即位图,有一些内置的位图可以直接使用名称,如’error’、'gray25’等,详见官方文档。对于位图文件则在文件全路径前面加上@
即可,如@/root/image.bitmap
;compound
:如何共同展示文字和图片,默认为’none’,即不能同时展示文字和图片,且图像(bitmap
)优先。其他可以是’bottom’, ‘top’, ‘left’, ‘right’或’center’,均表示图像相对于文字的位置;image
:表示组件中展示的图片,值需要为tkinter.Image
或其子类的实例,支持png和gif格式。该属性优先于bitmap
、text
和compound
,即设置该属性后就仅展示该属性定义的图片,用法举例:photo = tk.PhotoImage(file=os.path.abspath('./photo.png')) btn_img = tk.Button(root, image=photo)
anchor
:表示组件中的信息展示在组件的哪个位置,用表示方向的几个字母,如"n"(北,上), “ne”(东北,右上), “e”(东,右), “se”(东南,右下), “s”(南,下), “sw”(西南,左下), “w”(西,左), “nw”(西北,左上),此外还有"center"(居中);justify
:表示多行文字的对齐方式,常用字符串’left’, ‘right’, ‘center’ and ‘fill’;cursor
:鼠标指向该组件时显示的指针图像,自带有一些,如’hand2’表示手形,也可以自定义位图文件;padx
,pady
:分别指在水平方向和垂直方向上的内边距,以像素为单位;insertbackground
:表示各种可以接收输入的组件(Text、Entry等),光标的背景颜色;insertwidth
,insertborderwidth
:分别表示输入型组件中光标的宽度和边框宽度,均以像素为单位;insertofftime
,insertontime
:分别表示输入型组件中光标在一个闪烁周期中的显示和隐藏时间,以毫秒为单位;orient
:表示组件的朝向,有’horizontal’和’vertical’两个可选值;
其中所有以像素为单位的属性值,也可以使用字符串,并且如果加上指定字符的后缀,还可以表示绝对长度,其中:'c’表示厘米、'i’表示英寸、'm’表示毫米、'p’表示打印机点数。
对于颜色类型的属性,可以直接用一些颜色的名称表示颜色,不同的操作系统上不一样,官方有颜色名称列表。也可用16进制数字表示颜色,如8位颜色就是’#RRGGBB’的格式,如’#ff0000’就是红色。
tkinter库中还有一个constants.py
,会在import tkinter
时自动导入。其中记录的就是很多属性值对应的一些枚举字符串,如tkinter.RAISED
。可以通过使用这种常量结合IDE的代码自动补全功能来防止拼写错误,并增加代码的可阅读性。
宽高属性
组件的大小可以不用主动设置,tkinter会根据其中的内容自动调整组件大小。但也可以通过height
和width
两个属性来设置组件的高和宽。不过这两个常用属性并没有出现在标准属性中。
这是由于虽然大多数组件中都有height
和width
这两个选项来设置组件的大小,但不同组件设置大小时的单位却不一样。甚至对于大多数tkinter组件,当设置了text
属性用来显示文字时,width
的单位是字符,表示可以容纳几个字符,height
的单位就是行数,表示可以容纳几行文字;而当设置了bitmat
或image
用于展示图片,包括文字和图片一同展示时,这两个属性的单位则统一为像素。
动态属性
很多组件可能需要在运行过程中动态变化其中显示的文字,也可以通过config(text='new text')
的方式修改,但若变化频率大的时候就很影响效率。并且对于tkinter.Entry
等组件,也需要获得用户的输入值。因此很多组件除了text
属性,还提供了textvariable
属性。从其名称就可以看出该属性接收的是一个变量,该变量与组件显示的文字或接收的文字输入绑定。该变量需要是tkinter.StringVar
、tkinter.IntVar
、tkinter.DoubleVar
、tkinter.BooleanVar
四种类的实例。这四种类都还有get()
方法用于获取目前绑定的文本内容;set()
方法用于更新绑定的文本内容。
除了textvariable
属性,tkinter.Radiobutton
中还有variable
属性用于绑定变量,value
变量则指明该单选框被选中时,绑定变量中的值。绑定在同一个变量的单选框就归于一组,同一时间只能选定一个。