Настройка виджетов с помощью классов

nastrojka vidzhetov s pomoshhju klassov Графические интерфейсы пользователя

В сценариях, использующих библиотеку tkinter, совсем необязательно применять приемы ООП, но они определенно могут оказаться полезными. Как мы только что видели, графические интерфейсы на базе tkinter строятся, как деревья объектов экземпляров классов. Ниже демонстрируется еще один способ применения ООП для моделирования графического интерфейса: специализация виджетов посредством наследования. Сценарий в примере 7.18 создает окно, изображенное на рис. 7.19.


Рис. 7.19. Подкласс кнопки в действии

 


 


Пример 7.18. PP4E\Gui\Intro\gui5.py from tkinter import *

class HelloButton(Button):

def __init__(self, parent=None, **config): # регистрирует метод callback Button.__init__(self, parent, **config) # и добавляет себя в интерфейс self.pack() # можно использовать старый

self.config(command=self.callback) # стиль аргумента config

подпись: def callback(self)# действие по умолчанию при нажатии

print(‘Goodbye world…’) # переопределить в подклассах

self.quit()

if __name__ == ‘__main__’:

HelloButton(text=’Hello subclass world’).mainloop()

В этом примере нет ничего необычного: он просто отображает одну кнопку, при нажатии на которую программа выводит сообщение и завершается. Но на этот раз мы сами создали виджет кнопки. Класс HelloButton наследует все свойства и методы класса Button, а также добавляет метод callback и логику в конструкторе, устанавливая параметру command значение self.callbackсвязанный метод экземпляра. При нажатии на кнопку теперь вызывается не просто функция, а метод callback нового класса виджета.

Здесь аргумент **config собирает в словарь все дополнительные именованные аргументы, которые затем передаются конструктору Button. Конструкция **config в вызове конструктора Button распаковывает словарь в список именованных аргументов (в действительности в этом нет необходимости, благодаря поддержке устаревшей формы вызова со словарем, встречавшейся нам ранее, но и вреда никакого не будет). Мы уже встречались с вызовом метода config виджетов в конструкторе HelloButton: это просто альтернативный способ передачи параметров настройки после создания виджета (вместо передачи аргументов конструктору).

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

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий