История курса рубля на PyQt5 + XML от ЦБ РФ

В данной статье мы создадим десктопное приложение используя PyQt5 и XML API от ЦБ РФ для получения курса валют. Интерфейс нашей программы будет достаточно простой. У нас будут несколько выпадающих списков для выбора дня, месяца и года. После выбора всех настроек, наше приложение сделает запрос к XML API от cbr.ru (Центральный Банк России) для получения курса доллара и евро на указанную дату.

Данный урок нацелен на улучшение знаний полученных после прочтения:

Скачать исходники: скрипт и изображения (33.4 кб)

Каркас приложения

В данном примере у нас обычный каркас для PyQt5 приложения. Мы указали фиксированный размер для нашего окна. Настроили заголовок приложения.

Лого приложения

Мы быстро создали  лого для нашего приложения и загрузили её в PyQt5 с помощью QPixmap. Вот так выглядит метод initUI после добавления лого.

Запускаем наш скрипт.

История курса рубля на PyQt5 + XML от ЦБ РФ

Выпадающие списки в PyQt5

После загрузки лого, нам понадобятся небольшие настройки для выбора дня, месяца и года. Тем самым, мы сформируем правильный запрос к API cbr.ru. Для создания выпадающих списков вы воспользуемся классом QComboBox из под-модуля PyQt5.QtWidgets.

Мы создадим 3 новых метода метода:

  • self.days() — создаем выпадающий список дней (1-30).
  • self.month() — создает выпадающий список номеров месяцев (1-12).
  • self.year() — создаем выпадающий список годов начиная с 2005.

После создания методов внутри класса CBR_API мы должны вызвать методы в initUI. Мы создадим и кнопку «OK» после нажатия на которую выполнится запрос к API банка.

Запускаем код и у нас должен появится вот такой результат.

История курса рубля на PyQt5 + XML от ЦБ РФ

Вывод курса валют

У нас слишком много места под выпадающими списками, нужно их заполнить иконками доллара и евро. Так-же, мы изменим шрифт текста для курса валют. Текст с курсом валют будет обновляться каждый раз как мы нажмем на кнопку «OK». Создаем метод load_result_image который загрузит иконки и выполнит позиционирование текста для каждой валюты.

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

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

Telegram Чат & Канал

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

Паблик VK

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

Не забываем добавить вызов данного метода в initUI. После чего запускаем наш код.

История курса рубля на PyQt5 + XML от ЦБ РФ

Backend приложения

Интерфейс нашего приложения готов. Теперь, нужно доделать и backend часть, для этого придерживаемся данного сценария:

  1. Пользователь выбирает нужный день, месяц, год
  2. Нажимает на «ОК«
  3. Выполняется makeRequest который использует библиотеку Requests на примерах.
  4. Собираем данные из выпадающих списках
  5. Формируем запрос к XML API от cbr.ru
  6. Выполняем парсинг полученных XML данных
  7. Обновляем текст с курсом валют
  8. ???
  9. Profit!

Для начала создадим недостающие методы:

  • makeRequest — получает данные из выпадающих списков и отправляет их в getResult.
  • getResult — выполняет запрос к XML cbr.ru и обрабатывает полученные данные.

Структура XML ответа от cbr.ru

Скрипт выполняет запрос к URL:

Получаем такой ответ:

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

  • ID Доллара: R01235
  • ID Евро: R01239

По данному идентификационному номеру мы и выполнили поиск нужной нам валюты используя библиотеку ElementTree и метод find.

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

Давайте узнаем какой сейчас курс рубля!

История курса рубля на PyQt5 + XML от ЦБ РФ

Благодарю за внимание!
Если есть вопросы — прошу в комментариях.