Введение в XRCed — wxPython #51

Если вы новичок в использовании wxPython, но уже знакомы с XML, вам может пригодиться данная статья. Почему? Потому, что wxPython поддерживает XRC, один из форматов файла XML, описывающий графический интерфейс в XML. На самом деле, документация и демо-пакеты wxPython содержат лишь редактор для создания и проведения различных манипуляций с этим форматом. Он называется XRCed. В этой статье я проведу вам небольшую экскурсию по XRCed, расскажу о его возможностях и его основном предназначении.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Весьма странно, что XRCed, который когда-то ещё не был частью wxPython, до сих пор имеет собственный веб-сайт. Мне сказали, что предыдущая версия отлично работает со считывателями (программами, озвучивающими интерфейс для слепых и слабовидящих), особенно в сравнении с последней версией, привязанной к демо-пакету. Так что, если вы у вас проблемы со зрением, то вам будет намного удобнее использовать предыдущую версию. Конечно, прошлая версия не обновлялась с 2007… Однако, каждому своё.

Приступая к работе

Введение в XRCed - wxPython #51

Как только вы установите демо-приложение, запустите инструмент, который называется XRC Resource Editor. Его главный экран выглядит как на скриншоте выше. Вы также увидите второе окно поменьше, которое выглядит вот так:

Введение в XRCed - wxPython #51

Второе окно позволяет вам добавлять в интерфейс различные виджеты. Для того, чтобы на самом деле понять, как это работает, нам нужно будет создать простое приложение.

Создаём наше первое приложение

Введение в XRCed - wxPython #51

Давайте создадим простое двухкнопочное приложение с помощью XRCed. Оно будет абсолютно бесполезно, но отлично подойдёт в качестве примера графического интерфейса, который создавался впопыхах.

Введение в XRCed - wxPython #51

Вы должны увидеть безымянную wxFrame, появляющуюся в правой части приложения, отображающуюся как рут в древе виджетов (это хорошо видно на скриншотах в начале статьи). Для этого примера мы собираемся назвать этот фрейм “MainFrame”. Теперь, выбрав этот фрейм в древе, добавьте панель, которая будет называться “MainPanel”.

Затем, на втором всплывающем окне (мы его описывали выше), есть ряд кнопок, расположенный вверху. Кликните по четвёртой слева (на ней изображены красные прямоугольники) и выберите BoxSizer, но сначала убедитесь в том, что объект на первом экране всё ещё выделен. Теперь, выбрав итем древа бокс сайзера, щёлкните по третей кнопке всплывающего окна и добавьте две кнопки в древо, называя их так, как показано. Сохраните вашу работу в файл twoBtns.xrc и у вас должен появиться файл, который выглядит так:

Это шокирует, но XRCed действительно выдаёт лёгкий для чтения XML-код. Теперь нам нужно выяснить как загрузить XML c помощью wxPython. К счастью, это достаточно просто. Смотрите:

Для того, чтобы загрузить XML, нам нужно импортировать модуль xrc из wx. Затем мы загружаем  XML со следующей строчкой: xrc.XmlResource(“twoBtns.xrc”). Учтите, что нам нужно попасть в имя (или путь) xrc-файла. Так что, вам придётся изменить то название, которое вы дали своей копии.

Чтобы загрузить рамку, мы вызываем метод объекта ресурса xml, который называется LoadFrame, пропуская его через None (к примеру no parent) и «имя, которое мы дали фрейму в xrc-файле». Здесь очень просто ошибиться. Вы ДОЛЖНЫ впечатать название виджета в код Python в точности, как вы сделали это в xrc-файле, иначе ничего не будет работать (или будет работать, но не так, как вы ожидаете). Кстати, название чувствительно к регистру. В любом случае, как только это сделано, вы делаете то, что вы обычно делаете в файле Python.

Создаём кое-что более сложное

Пример в прошлом разделе довольно хиленький. Давайте взглянем на то, как мы можем создать часть приложения в XRC, а вторую часть в wxPython. На скриншоте ниже изображён notebook с двумя секциями и PlateButton под ними. Notebook, фрейм и панель полностью сделаны в XRC, в то время как PlateButton – это просто обычный wx. Вот XML:

Введение в XRCed - wxPython #51

Пример в прошлом разделе довольно хиленький. Давайте взглянем на то, как мы можем создать часть приложения в XRC, а вторую часть в wxPython. На скриншоте ниже изображён notebook с двумя секциями и PlateButton под ними. Notebook, фрейм и панель полностью сделаны в XRC, в то время как PlateButton – это просто обычный wx. Вот XML:

Теперь давайте добавим PlateButton:

Как вы видите это было также просто, как создавать приложения в чистом wxPython. Если бы здесь была wx.Button, определяемая в XRC, нам бы пришлось сделать то же самое, что мы делали с панелью, чтобы создать обработчика для неё. Как только у нас есть обработчик, мы можем привязывать события привычным способом.

Использование XRCed для генерирования кода Python

Приложение XRCed содержит генератор кода Python, который мы можем превратить в подкласс в нашем собственном коде. Для начала, мы используем первый простой пример из этой статьи, а затем расширим его, чтобы показать вам как привязывать события.

Запустите XRCed, загрузите в него первый пример, а затем нажмите FileGeneratePython. Согласитесь со всеми значениями по умолчанию и кликните по кнопке модуля Generate. Теперь у вас должно быть фрагмент автоматически сгенерированного кода, выглядящий вот так:

Это немного коряво, но если вы можете прочесть обычный код wxPython, то и с этим разобраться должны. Теперь давайте создадим подкласс из этого кода. Почему мы это делаем? Таким образом мы можем изменить XRC-файл и последующий сгенерированный код и наш подкласс останется прежним. Это помогает нам отделять model (XML) от view (код wxPython).

Особое примечание: XRC пример, приведённый выше, не работает в wxPython Phoenix!

В любом случае, вот простой пример кода, который мы можем использовать с данным XRC примером в wxPython Classic.

Обратите внимание, что мы импортируем модуль “twoBtns_xrc”, который схож с тем, что я называю XRCfile. XRCed добавляет “_xrc” к названию файла Python. Как только импорт был произведён, мы может получить доступ к объекту XRC под названием Frame и превратить его в подкласс.

Итоги

Данная статья знакомит вас с азами использования приложения XRCed. Надеюсь, что вы узнали достаточно, чтобы применять его с умом и создавать действительно крутой код, используя эти «протоптанные дорожки». Если у вас возникли вопросы, то сначала ознакомьтесь с материалами Вики, задайте вопрос экспертам wxPython через электронную почту или просто поболтайте с ребятами на IRC-канале.