0%

Python Tkinter 组件配置

组件配置

我们通常使用选项而不是方法来控制组件的显示。
标准的选项包括文本、颜色、大小、命令回调等。
为了处理这些选项,所有的核心组件都提供了相同的配置接口:

配置接口

1
widgetclass(master, option=value, …) => widget

其中widgetclass为上一节提到的组件类

创建这个窗口部件的一个实例,这个实例作为给定的 master 的孩子,并且使用给定的选项。所有的选项都有
默认值,因此在简单的情况下,你仅需要指定这个 master。如果你想的话,你也可以不指定 master;Tkinter这时会使用最近创建的 root 窗口作为 master。注意这个 name 选项仅能 在窗口部件被创建时设置。

cget(“option”) => string

返回一个选项的当前值。选项的名字和返回值都是字符串。要得到 name 选项,使用 str(widget)代替。

config(option=value, …)

configure(option=value, …)

设置一个或多个选项(作为关键字参数给定)。
注意一些选项的名字与 Python 中的保留字相同(class,from 等)。要使用这些作为关键字参数,仅需要在
这些选项名后添加一下划线(class_,from_)。注意你不能用此方法来设置 name 选项;name 选项只能在窗
口部件被创建时设置。

为了方便起见,窗口部件也实现一个局部的字典接口。 setitem 方法映射 configure,而
__getitem__方法映射 cget。你可以使用下面的语法来设置和查询选项:

value = widget[“option”]
widget[“option”] = value

注意每个赋值都导致一个对 Tk 的调用。如果你希望去改变多个选项,单独地调用(config 或 configure)
去改变它们是一个好的主意。

这下面的字典方法也适用于窗口部件

keys() => list

返回窗口部件中所有可以被设置的选项的一个列表。name 选项不包括在这个列表中(它不能通过字典接口被
查询或修改)

向后兼容性

关键字参数在 Python1.3时被引入。之前,使用原始的 Python 字典将选项传递给窗口构造器和 configure
方法。原代码类似如下:

1
2
self.button = Button(frame, {"text": "QUIT", "fg": "red", "command": frame.quit})
self.button.pack({"side": LEFT})

关键字参数语法更优雅和少容易发生错误。但是为了与存在的代码兼容,Tkinter 仍支持老的语法。在新的程
序中你不应再用老的语法,即使是在某些情况下是很有吸引力的。例如,如果你创建了一个定制的窗口部件,
它需要沿它的父类传递配置选项,你的代码可能如下:

1
2
def __init__(self, master, **kw):
Canvas.__init__(self, master, kw) # kw is a dictionary

上面的代码在当前版本的 Tkinter 下工作的很好,但是它在将来的版本下可能不工作。一个通常的办法是使
用 apply 函数:

1
2
def __init__(self, master, **kw):
apply(Canvas.__init__, (self, master), kw)

这个 apply 函数使用了一个函数(一个未约束的方法),一个带参数的元组(它必须包括 self,因为我们调
用一个未约束的方法),一个可选的,提供了关键字参数的字典。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道