Написать пост

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

Аватар Никита Мингалеев

Простой пример разработки мобильного приложения с использованием Python и Briefcase. Результат — приложение, которое превратит ваш смартфон в пульт для ТВ.

Обложка поста Создаем пульт для телевизора при помощи 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 и смартфона 1

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

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

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

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

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

Давайте добавим кнопку (цифра 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 и смартфона 4

Теперь включаем телевизор и пробуем нажать цифру 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 и смартфона 5

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
17К открытий17К показов