Читать «Программирование на Python. Том 1» онлайн - страница 665

Марк Лутц

31

В данной книге «Windows» относится к интерфейсу Microsoft Windows, распространенному на PC, а «X Window» относится к интерфейсу X11, чаще всего встречающемуся на платформах Unix и Linux. Эти два интерфейса в целом привязаны к платформам Microsoft и Unix (и Unix-подобным), соответственно. Существует возможность выполнения X Window поверх операционной системы Microsoft и эмуляции Windows в Unix и Linux, но эта возможность используется достаточно редко. Чтобы добавить туману, замечу, что Mac OS X обеспечивает поддержку tkinter в X Window и в родной графической подсистеме Aqua, в дополнение к платформозависимой поддержке cocoa (хотя обычно особенности OS X не слишком выделяются в коктейле Unix-подобных систем).

32

Формально вызов mainloop возвращает управление сценарию только после выхода из цикла событий. Обычно это происходит при закрытии главного окна, но может случиться и в ответ на явный вызов метода quit, который завершает вложенный цикл событий, но оставляет окно открытым. Почему это имеет значение, вы узнаете в главе 8.

33

Совет: Как уже предлагалось выше, при вводе программного кода, использующего библиотеку tkinter, в интерактивной оболочке, вам может не потребоваться вызывать функцию mainloop, чтобы отобразить виджеты. Это необходимо делать в текущей версии IDLE, но в простом интерактивном сеансе, запущенном в окне консоли, этого может не потребоваться. В любом случае управление будет возвращено интерактивной оболочке, как только вы закроете созданное окно. Примечательно, что если явно создать виджет главного окна вызовом конструктора Tk() и присоединить к нему виджеты (как описывается ниже), вам придется вызвать его снова после закрытия окна, иначе окно приложения не появится.

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 приводятся в конце главы.