Соответствие между Python/tkinter и Tcl/Tk

sootvetstvie mezhdu python tkinter i tcl tk Графические интерфейсы пользователя

В начале этой главы я упомянул, что библиотека tkinter является интерфейсом Python к библиотеке Tk, первоначально написанной для языка Tcl. В помощь читателям, переходящим на Python с Tcl, и для подведения итогов некоторых основных тем, встретившихся в этой главе, в данном разделе сравниваются интерфейсы Python и Tcl к Tk. Кроме того, такое сопоставление сделает для разработчиков программ на языке Python более полезными справочники по Tk, написанные для других языков.

Вообще говоря, ориентированность Tcl на применение строковых команд сильно отличается от подхода к программированию на языке Python, основанного на объектах. Однако, что касается использования Tk, синтаксические различия невелики. Ниже приводятся некоторые главные отличия интерфейса Python к tkinter:

Создание

Виджеты создаются как экземпляры классов при вызове конструктора класса виджета.

Владельцы (родители)

Родителями являются ранее созданные объекты, передаваемые конструкторам классов виджетов.

Параметры виджетов

Параметры являются именованными аргументами конструктора или метода config либо ключами словарей.

Операции

Операции виджетов (действия) становятся методами объектов классов виджетов tkinter.

Обратные вызовы

Обработчиком события может быть любой вызываемый объект: функция, метод, lambda-выражение и так далее.

Расширение

Виджеты расширяются с использованием механизма наследования классов в языке Python.

Композиция

Интерфейсы конструируются путем прикрепления объектов, а не конкатенации имен.

Связанные переменные (следующая глава)

Переменные, ассоциируемые с виджетами, являются объектами классов tkinter с методами.

Команды создания виджетов в языке Python (например, button) являются именами классов, начинающимися с заглавной буквы (например, Button), операции с виджетами, состоящие из двух слов (например, add command), становятся одним именем метода с подчеркиванием внутри (например, add_command), а метод «configure» можно кратко записывать «config», как в Tcl. В главе 8 будет также показано, что «переменные» библиотеки tkinter, ассоциируемые с виджетами, принимают форму объектов экземпляров классов (например, StringVar, IntVar) с методами get и set, а не просто именами переменных Python или Tcl. В табл. 7.2 более конкретно приведены основные соответствия между языками.

Таблица 7.2. Соответствие между Tk и tkinter

Операция

Tcl/Tl

Python/tkinter

Создание

Frame .panel

panel = Frame()

Владелец

button .panel.quit

quit = Button(panel)

Параметры

button .panel.go -fg black

go = Button(panel, fg=’black’)

Настройка

.panel.go config -bg red

go.config(bg=’red’) go[‘bg’] = ‘red’

Действия

.popup invoke

popup.invoke()

Компоновка

pack .panel -side left -fill x

panel.pack(side=LEFT, fill=X)

 

Конечно, некоторые из этих различий касаются не только синтаксиса. Например, Python строит внутреннее дерево объектов графических элементов, исходя из аргументов, определяющих родителя и передаваемых конструктору, не требуя объединения строк путей к виджетам. После создания виджета к нему можно обращаться непосредственно, по ссылке. При программировании на языке Tcl иногда можно спрятать записанные через точку имена путей вручную в переменных, но это не то же самое, что чисто объектно-ориентированная модель Python.

Как только вы напишете на языке Python несколько сценариев, использующих библиотеку tkinter, отличия объектов Python наверняка будут казаться вам тривиальными. В то же время, поддержка объектноориентированных приемов в языке Python вносит совершенно новую составляющую в разработку для Tk: вы получаете те же самые виджеты плюс поддержку возможности структурирования и многократного использования программного кода.


Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011
Оцените статью
Секреты программирования
Добавить комментарий