【Tkinter系列13/15】标准化外观和选项数据库

27. 标准化外观和选项数据库

可以轻松地将颜色、字体和其他选项应用于 小部件,当您创建它们时。然而

  • 如果您希望很多小部件具有相同的 背景颜色或字体,指定每个都很乏味 每次选项,以及

  • 让用户覆盖您的选择是很好的 他们最喜欢的配色方案、字体和其他选择。

因此,我们使用选项的想法 数据库以设置默认选项值。

在我们讨论如何设置选项之前,请考虑问题 一般自定义 GUI 的外观。我们可以 为应用程序中的每个小部件命名,然后询问 用户指定每个名称的每个属性。但是这个 很麻烦,并且还会使应用程序难以 重新配置 - 如果设计器添加新微件,则 用户必须描述每个新属性的每个属性 控件。

因此,选项数据库允许程序员和用户 指定描述的一般模式 要配置的小组件。

这些模式对小部件的名称进行操作,但是 小部件使用两个并行命名 命名方案:

  1. 每个小部件都有一个类名。 默认情况下,类名与类相同 构造函数:用于按钮、框架等。但是,你 可以创建新的小部件类,通常继承 从课堂上,并给他们新的 你自己创作的名字。有关详细信息,请参见第 27.1 节 “如何命名小部件类”。'Button''Frame'Frame

  2. 您还可以为任何小部件提供一个实例 名称。小组件的默认名称为 通常是一个无意义的数字(请参见第 5.11 节 “窗口名称”)。但是,与小部件一样 类,您可以为任何小部件指定名称。请参阅的 第 27.2 节 “如何命名小部件实例”部分了解详细信息。

因此,每个应用程序中的每个小部件都有两个 名称的层次结构 - 类名层次结构和 实例名称层次结构。例如,按钮 嵌入在文本小部件中,该小部件本身嵌入在 框架将具有类层次结构。它可能还有一个实例 层次结构有点像如果你这么命名 所有实例。初始点代表根 窗;有关更多信息,请参见第 5.11 节 “窗口名称” 有关窗口路径名的信息。Frame.Text.Button.mainFrame.messageText.panicButton

选项数据库机制可以使用任一类 定义选项时的名称或实例名称,以便您可以 使选项适用于整个类(例如,所有按钮都有 蓝色背景)或特定实例(例如, 紧急按钮上有红色字母)。在我们看了如何 为了命名类和实例,在第 27.3 节 “资源规范行”中,我们将讨论选项 数据库确实有效。

27.1. 如何命名小部件类

例如,假设这是一个新的 已创建的小组件类。这可能是最好的 让新的小部件类从类继承,所以对 Tkinter 来说,它就像一个框架, 您可以排列其他小部件,例如标签, 条目和其中的按钮。JukeboxFrame

您可以通过传递名称来设置新小部件的类名 作为父级的选项 新类的构造函数中的构造函数。这是一个 定义新类的代码片段:class_

class Jukebox(tk.Frame):
    def __init__(self, master):
        '''Constructor for the Jukebox class
        '''
        tk.Frame.__init__(self, master, class_='Jukebox')
        self.__createWidgets()

27.2. 如何命名小部件实例

为特定小部件提供实例名称 应用程序,设置该小部件的选项 到包含名称的字符串。name

下面是实例名称的示例。假设你是 在应用程序中创建多个按钮,并且您希望 实例名称为 .对构造函数的调用可能会 看起来像这样:panicButton

  self.panic = tk.Button(self, name='panicButton', text='Panic', ...)

27.3. 资源规范行

选项文件中的每一行指定一个或 一个或多个应用程序中的更多选项,并且具有 这些格式:

app option-pattern: value
option-pattern: value

仅当名称为 应用程序匹配 ;第二种形式 设置所有应用程序的选项。app

例如,如果您的应用程序称为 xparrot,则表单的行

xparrot*background: LimeGreen

将 Xparrot 应用程序中的所有选项设置为 Lime 绿。(使用选项上的选项 启动应用程序时的命令行以设置 名称到 .)background-name'xparrot'

该部分具有以下语法:option-pattern

{
   
   {*|.}name}...option

也就是说,每个都是一个 零个或多个名称的列表,每个名称前面都有 星号或句点。该系列中的姓氏是 您正在设置的选项的名称。其余的每个人都 的名称可以是:option-pattern

  • 小部件的名称(大写),或

  • 实例的名称(小写)。

期权模式的工作方式有点复杂。 让我们从一个简单的例子开始:

*font: times 24

这一行说所有选项 应默认为 24 点倍。这称为松散绑定符号,表示此选项模式适用于任何应用程序中任何位置的任何选项。 比较此示例:font*font

*Listbox.font: lucidatypewriter 14

和之间的周期称为紧 绑定符号,这意味着这个规则 仅适用于微件的选项 在课堂上.ListboxfontfontListbox

再举一个例子,假设你的 xparrot 应用程序有 类的小部件的实例。在 为了为所有设置默认背景颜色 该类的小部件,您可以 在选项文件中放一行,如下所示:JukeboxJukebox

xparrot*Jukebox*background: PapayaWhip

和之间的松散绑定 () 符号使 规则适用于以下任何选项 . 比较此选项行:*JukeboxbackgroundbackgroundJukebox

xparrot*Jukebox.background: NavajoWhite

此规则将应用于构成小部件本身的框架,但由于 紧密绑定符号 它不适用于以下小部件 位于小部件内。JukeboxJukebox

在下一节中,我们将讨论 Tkinter 如何计算 如果存在,请准确列出要使用的选项值 适用的多个资源规范行。

27.4. 资源匹配规则

创建小部件时,未指定 某些选项和两个或多个资源的值 规格适用于该选项,最具体 一个适用。

例如,假设您的选项文件包含这两个 线:

*background: LimeGreen
*Listbox*background: FloralWhite

这两个规范都适用于小部件中的选项,但 第二个更具体,所以它会赢。backgroundListbox

通常,资源规范中的名称是 序列 N 1, N 2, N3, ..., o 其中每个 ni 是一个 类或实例名称。类名的排序自 从最高到最低级别,O 是选项的名称。

但是,当 Tkinter 创建一个小部件时,它所拥有的只是 该小组件的类名和实例名。

以下是资源的优先规则 规格:

  1. 选项的名称必须与 的 o 部分匹配。 例如,如果规则是option-pattern

    xparrot*indicatoron: 0

    这将仅匹配名为 的选项。indicatoron

  2. 紧密绑定运算符()更多 比松散绑定运算符 () 特定。例如,一行比一行更具体 为。.**Button.font*Button*font

  3. 对实例的引用比 对类的引用。例如,如果您有 按钮的实例名称为 ,规则比 的规则。panicButton*panicButton*font*Button*font

  4. 具有更多级别的规则更具体。为 示例,IS 的规则 比 的规则更具体。*Button*font*font

  5. 如果两个规则具有相同数量的级别,则名称 列表中较早的比较较晚的更具体 名字。例如,规则比规则更具体 为。xparrot*font*Button*font

猜你喜欢

转载自blog.csdn.net/gongdiwudu/article/details/132644081