Главная


27.4. Правила сопоставления ресурсов

Когда вы создаете виджет и не указываете значение некоторой опции, а к этой опции применимы две или более спецификаций ресурсов, применяется наиболее конкретная.

Например, предположим, что в вашем файле опций есть следующие две строки:

*background: LimeGreen
*Listbox*background: FloralWhite

Обе спецификации применяются к опции background в виджете Listbox, но вторая более точна, поэтому она выигрывает.

В общем случае имена в спецификации ресурса представляют собой последовательность n1, n2, 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. Правило с большим количеством уровней является более конкретным. Например, правило для *Button*font является более конкретным, чем правило для *font.

  5. Если два правила имеют одинаковое количество уровней, то имена, расположенные раньше в списке, являются более конкретными, чем более поздние имена. Например, правило для xparrot*font является более конкретным, чем правило для *Button*font.


>> ttk: Тематические виджеты