Выбрать главу

34

Если рассмотреть главный файл tkinter в библиотеке исходного программного кода Python (в настоящее время Lib\tkinter\__init__.py), можно заме

тить, что имена модулей, не предназначенных для экспорта, начинаются с одного символа подчеркивания. Python не копирует такие имена при обращении к модулю в операторе from в формате *. Модуль с константами называется constants.py и находится в том же самом каталоге пакета, хотя с течением времени имя и местоположение его может измениться*

35

В действительности именованные аргументы впервые появились в Python, чтобы сделать более очевидными такие вызовы tkinter. Внутри интерпретатора именованные аргументы передаются как словарь (который можно получить, указав аргумент вида **name в инструкции def объявления функции), поэтому обе схемы аналогичны по реализации. Но они отличаются количеством символов, которые нужно ввести и проверить.

36

Бывшим программистам на языке Tcl, возможно, будет интересно узнать, что Python не только внутренне строит дерево виджетов, но и использует его для автоматического создания строк путей к виджетам, которые приходится вручную писать в Tcl/Tk (например, .panel.row.cmd). Python использует адреса объектов классов виджетов, помещает их в компоненты пути и сохраняет полученные пути в дереве виджетов. Например, метке, прикрепленной к контейнеру, может быть присвоено внутреннее имя, такое как .8220096.821 9408. Однако вас это не должно волновать. Просто создавайте и связывайте объекты графических элементов, передавая их родителей, и предоставьте Python самому работать с путями, опираясь на дерево объектов. Дополнительные сведения об отношениях Tk и tkinter приводятся в конце главы.

37

Технически после изменения размеров окна этапы добавления просто выполняются заново. Но поскольку это означает, что для графических элементов, добавляемых последними, останется недостаточно места, это равносильно тому, что элементы, добавленные последними, обрезаются первыми.

38

Если заглянуть в исходные тексты модуля tkinter (главным образом в файл __init__.py в каталоге Lib\tkinter), можно заметить, что многие из создаваемых им имен атрибутов начинаются с одного символа подчеркивания, что делает их уникальными; другие имена - нет, поскольку они могут быть полезны за пределами реализации tkinter (например, self.master, self. children). Странно, но библиотека tkinter по-прежнему не использует трюк с «псевдочастными» атрибутами Python, имена которых начинаются с двух символов подчеркивания, что влечет за собой автоматическое добавление имени содержащего их класса и локализации для создающего класса. Если библиотека tkinter будет когда-нибудь переписана так, чтобы использовать эту особенность, конфликты имен в подклассах виджетов будут происходить гораздо реже. Большинство атрибутов классов виджетов являются методами, предназначенными для использования в клиентских сценариях; имена, начинающиеся с одного символа подчеркивания, могут использоваться тоже, но при этом вероятность конфликтов имен все-таки ниже.

39

Всемирно известный производитель товаров для детского творчества, в том числе цветных карандашей, красок, мелков, фломастеров и пр. - Прим. ред.

40

Видимо, у автора установлены какие-то дополнительные драйверы от производителя мыши. В стандартной поставке Windows такая настройка отсутствует. - Прим. ред.

41

Исторический анекдот: в устаревшей в данное время версии tkinter, поставлявшейся с Python 1.3, можно было также устанавливать и извлекать значения переменных, обращаясь к ним как к функциям с аргументами или без (например, var(value) и var()). В настоящее время вместо этого нужно вызывать методы set и get переменных. По неустановленным причинам функциональная форма вызова прекратила работать годы назад, хотя ее все еще можно встретить в старом программном коде на языке Python (и в первых изданиях, по крайней мере, одной книги по языку Python, выпущенной издательством O’Reilly). Если исправление, выполненное из эстетических соображений, приводит к неработоспособности существующего программного кода, можно ли его считать исправлением?

42

Не я автор данной картинки - она появилась в качестве баннера на сайтах для разработчиков, таких как slashdot.com, когда в 1999 году вышло первое издание «Learning Python». Она породила такую волну возмущения приверженцев Perl, что издательство O’Reilly в конце концов было вынуждено убрать эту рекламу. Хотя возможно, именно поэтому она оказалась в этой книге.

43

Использована цитата из фильма Стенли Кубрика «Сияние». - Прим. ред.