вНовости программирования

Создаем пульт для телевизора при помощи Python и смартфона

Рассказывает Энтони Шоу


Вряд ли кто-то вспоминает о Python, когда речь заходит о мобильной разработке. И очень зря, у нас даже есть статья, посвященная этому вопросу: для Python тоже существуют инструменты, способные преобразовать ваш код для работы под iOS, Android или Windows Phone.

В этом руководстве я покажу вам, как создать простой пульт (роль пульта будет выполнять iPhone)  для телевизоров Panasonic Viera.

Нам понадобятся:

  • Xcode, так как мы пишем для iPhone, но пульт также можно сделать и для Android, об этом мы поговорим в конце;
  • Желательно Python 3.5;
  • Телевизор Panasonic Viera с возможностью подключения к сети.

Создаем проект

Загружаем себе Briefcase — инструмент для конвертирования проект на Python в нативные приложения. Сделать это можно следующим образом: pip install briefcase. Далее создаем новую папку для нашего проекта mkdir tv_remote, внутри нее создаем папку Remote с файлами __init__.py и app.py. __init__.py может быть пустым, а вот в app.py нужно написать следующее:

import toga def button_handler(widget): print("hello") def build(app): box = toga.Box() button = toga.Button('Hello world', on_press=button_handler) button.style.set(margin=50) box.add(button) return box if __name__ == '__main__': app = toga.App('First App', 'org.pybee.helloworld', startup=build) app.main_loop()

Теперь создадим файл setup.py. В нем мы будем описывать для какой платформы создается приложение. Обозначим pip пакеты, которые мы будем использовать. Нам понадобятся библиотека toga UI и библиотека для управления телевизором — PyViera.

from setuptools import setup, find_packages setup(name='Remote', version = '0.1', packages = find_packages(), options = { 'app': { 'formal_name': 'TV Remote', 'bundle': 'org.tv.remote' }, 'ios': { 'app_requires': [ 'toga-ios', 'git+https://github.com/tonybaloney/pyviera-1.git@master#egg-info=pyviera' ] } } )

После этого ваша директория должна выглядеть следующим образом:

python android briefcase

Теперь внутри папки tv_remote запускаем команду python setup.py ios, которая загрузит необходимые компоненты и создаст xcode проект.

python android briefcase

Запустим проект. Создастся симулятор iPhone и наше приложение.

python android briefcase

Создаем пульт

Давайте добавим кнопку (цифра 5) для переключения канала.

import toga from pyviera import Viera tvs = Viera.discover() def channel_5(widget): global tvs if len(tvs) == 0: tvs = Viera.discover() tvs[0].num(5) def build(app): box = toga.Box() button = toga.Button('5', on_press=channel_5) button.style.set(margin=50) box.add(button) return box if __name__ == '__main__': app = toga.App('TV Remote', 'org.tv.remote', startup=build) app.main_loop()

Перезапустим приложение. Если все работает, вы должны увидеть следующее сообщение:

python android briefcase

Теперь включаем телевизор и пробуем нажать цифру 5!

Создаем остальные кнопки

Так как Toga позволяет применять CSS стили для выравнивания, мы создадим 5 рядов кнопок и расположим их как на реальном пульте от телевизора.

import toga from colosseum import CSS from pyviera import Viera tvs = Viera.discover() def set_channel(widget): global tvs channel = int(widget.label) print("Changing to channel {0}".format(channel)) tvs[0].num(channel) def mute(widget): global tvs tvs[0].mute() def build(app): row_c = toga.Box() row_c.add(toga.Button('mute', on_press=mute)) row_c.style.set(flex_direction='row', margin=5, padding_left=60) row_0 = toga.Box() row_0.add(toga.Button('1', on_press=set_channel)) row_0.add(toga.Button('2', on_press=set_channel)) row_0.add(toga.Button('3', on_press=set_channel)) row_0.style.set(flex_direction='row', margin=5) row_1 = toga.Box() row_1.add(toga.Button('4', on_press=set_channel)) row_1.add(toga.Button('5', on_press=set_channel)) row_1.add(toga.Button('6', on_press=set_channel)) row_1.style.set(flex_direction='row', margin=5) row_2 = toga.Box() row_2.add(toga.Button('7', on_press=set_channel)) row_2.add(toga.Button('8', on_press=set_channel)) row_2.add(toga.Button('9', on_press=set_channel)) row_2.style.set(flex_direction='row', margin=5) row_3 = toga.Box() row_3.add(toga.Button('0', on_press=set_channel)) row_3.style.set(flex_direction='row', margin=5, padding_left=60) box = toga.Box() box.style.set(flex_direction='column', padding_top=60, padding_left=100) box.add(row_c) box.add(row_0) box.add(row_1) box.add(row_2) box.add(row_3) return box if __name__ == '__main__': app = toga.App('TV Remote', 'org.tv.remote', startup=build) app.main_loop()

Перезапустим приложение и — вуаля — работающий пульт для телевизора!

python android briefcase

Что делать, если у вас Android?

Вернемся к моменту, когда мы работали с setup.py, и теперь вместо python setup.py ios запустим python setup.py android. После этого briefcase создаст для вас Android проект.

Запись Создаем пульт для телевизора при помощи Python и смартфона впервые появилась Типичный программист.

Источник: Типичный программист