Сценарий в примере 7.18 стандартизирует поведение — он демонстрирует возможность настройки виджетов путем создания подклассов вместо передачи параметров. Экземпляр класса HelloButton является настоящей кнопкой — при ее создании параметры настройки, такие как text, передаются как обычно. Но можно также определить обработчик событий, переопределив в подклассе метод callback, как показано в примере 7.19.
Пример 7.19. PP4E\Gui\Intro\gui5b.py
from gui5 import HelloButton
class MyButton(HelloButton): # подкласс класса HelloButton
def callback(self): # переопределяет метод обработчика
print(“Ignoring press!…”) # события нажатия кнопки
if __name__ == ‘__main__’:
MyButton(None, text=’Hello subclass world’).mainloop()
Этот сценарий создает то же самое окно, но вместо завершения программы при нажатии кнопки MyButton происходит вывод сообщения в поток stdout и программа продолжает работу. Ниже показаны сообщения, выведенные в стандартный поток вывода после нескольких нажатий:
C:\…\PP4E\Gui\Intro> python gui5b.py
Ignoring press!…
Ignoring press!…
Ignoring press!…
Ignoring press!…
Решить, как проще настраивать графические элементы — создавая подклассы или путем передачи им параметров, — это дело вкуса. Но нужно отметить, что библиотека Tk приобретает в Python настоящие объектноориентированные черты, поскольку объектно-ориентированным является сам язык Python — используя привычные приемы ООП, мы можем создавать свои подклассы виджетов. Такой подход позволяет определять не только общие черты поведения, но и общий внешний вид.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011