Контекстные менеджеры wxPython #11

автор

Набор инструментов wxPython обзавёлся контекстными менеджерами несколько лет тому назад, но, по каким-то причинам, примеров их использования в приложениях можно найти лишь несколько. В данной статье мы рассмотрим 3 примера контекстных менеджеров в wxPython. Начнём мы с написания собственного контекстного менеджера, а затем рассмотрим несколько встроенных в wxPython вариантов.

Создание вашего собственного контекстного менеджера в wxPython

Создать собственный контекстный менеджер в wxPython достаточно просто. Мы будем использовать wx.FileDialog в нашем примере контекстного менеджера.

В данном примере мы превращаем wx.FileDialog в подкласс, а затем просто избавляемся от методов __enter__ и __exit__. Это превратит нашу инстанцию FileDialog в контекстный менеджер, в случаях, когда мы вызываем его посредством утверждения with, дотсупного в wxPython. Давайте добавим пару строк кода, чтобы утилизировать нашу абсолютно новую версию File Dialog.

Взгляните на код в MyPanel. Здесь вы можете увидеть использование нами утверждения with, дотсупного в wxPython, в хендлере событий onOpenFile вне класса MyPanel. Теперь же давайте продвинемся вперёд и взглянем на некоторые встроенные в wxPython примеры.

Контекстный менеджер wxPython

Пакет wxPython поддерживает контекстные менеджеры во всём, что является подклассом wx.Dialog, а также в следующих виджетах:

  • BusyInfo
  • BusyCursor
  • WindowDisabler
  • LogNull
  • DCTextColourChanger
  • DCPenChanger
  • DCBrushChanger
  • DCClipper
  • Freeze / wx.Thaw

Возможно, есть и другие, но в этом списке собрано большинство виджетов, обладающих подобной возможностью. Давайте взглянем на несколько примеров:

В коде, который вы видите сверху, есть 2 примера контекстных менеджеров wxPython. Первый в хендлере событий под названием onOpenColorDialog. Здесь мы создаём инстанцию из wx.ColourDialog, а затем извлекаем нужный цвет, если пользователь нажмёт кнопку «ОК». Второй пример немного сложнее лишь в том, что он прячет (фрейм) рамку перед отображением инстанции BusyInfo. Честно говоря, я думаю, что второй пример может быть улучшен помещением задачи с появлением и скрыванием рамки в сам контекстный менеджер, но я оставлю его нетронутым, чтобы мои читатели могли немного поупражняться.

Итоги

Контекстные менеджеры wxPython достаточно удобны и просты в использовании. Я надеюсь, что когда-то вы примените их в своём коде. Чтобы убедиться в этом, испробуйте и другие контекстные менеджеры wxPython, кроме тех, что мы рассматривали в примерах. Вдруг, они идеально подойдут вашей базе кодов или просто сделают ваш код немного чище.

Вам может быть интересно

Scroll Up