Применять цвета, шрифты и другие параметры к виджетам при их создании очень просто. Однако,
если вы хотите, чтобы у многих виджетов был одинаковый цвет фона или шрифт, то каждый раз указывать каждый параметр утомительно, и
хорошо бы дать пользователю возможность заменить ваш выбор своими любимыми цветовыми схемами, шрифтами и другими вариантами.
Поэтому мы используем идею базы данных опций (option database) для установки значений опций по умолчанию.
Ваше приложение может указать файл (например, стандартный файл .Xdefaults, используемый в X Window System), который содержит предпочтения пользователя. Вы можете настроить свое приложение так, чтобы оно считывало этот файл и указывало Tkinter использовать эти значения по умолчанию. См. метод .option_readfile(), выше, в разделе 26, "Методы универсальных виджетов".
Ваше приложение может напрямую задать значения по умолчанию для одного или многих типов виджетов с помощью метода .option_add(); см. этот метод в разделе 26, "Универсальные методы виджетов".
Прежде чем мы обсудим, как устанавливаются опции, рассмотрим проблему настройки внешнего вида графических интерфейсов в целом. Мы могли бы дать каждому виджету в приложении имя, а затем попросить пользователя указать каждое свойство каждого имени. Но это громоздко, к тому же приложение будет сложно переконфигурировать - если дизайнер добавит новые виджеты, пользователю придется описывать каждое свойство каждого нового виджета.
Поэтому база данных опций позволяет программисту и пользователю задавать общие шаблоны (general patterns), описывающие, какие виджеты следует конфигурировать.
Эти шаблоны оперируют именами виджетов, но виджеты именуются с помощью двух параллельных схем именования:
Каждый виджет имеет имя класса (class name). По умолчанию имя класса совпадает с именем конструктора класса: 'Button' для кнопок, 'Frame' для рамок и так далее. Однако вы можете создавать новые классы виджетов, обычно наследуя от класса Frame, и давать им новые имена по своему усмотрению. Подробности см. в Раздел 27.1, "Как назвать класс виджета".
Вы также можете дать любому виджету имя экземпляра (instance name). По умолчанию имя виджета обычно представляет собой бессмысленное число (см. Раздел 5.11, "Имена окон"). Однако, как и в случае с классами виджетов, вы можете присвоить имя любому виджету. Подробности см. в разделе Раздел 27.2, "Как присвоить имя экземпляру виджета".
Таким образом, каждый виджет в любом приложении имеет две иерархии имен - иерархию имен классов и иерархию имен экземпляров. Например, кнопка, встроенная в текстовый виджет, который сам встроен во фрейм, будет иметь иерархию классов Frame.Text.Button. У нее также может быть иерархия экземпляров, например .mainFrame.messageText.panicButton, если вы дадите такие имена всем экземплярам. Начальная точка обозначает корневое окно; дополнительную информацию об именах путей к окнам см. в Раздел 5.11, "Имена окон".
Механизм базы данных опций может использовать как имена классов, так и имена экземпляров при определении опций, поэтому вы можете сделать так, чтобы опции применялись ко всем классам (например, все кнопки имеют синий фон) или к конкретным экземплярам (например, на кнопке " Panic" есть красные буквы). После того как мы рассмотрим, как давать имена классам и экземплярам, в разделе 27.3, "Строки спецификации ресурсов" мы обсудим, как на самом деле работает база данных опций.