- Регистрация
- 9 Май 2015
- Сообщения
- 1,071
- Баллы
- 155
- Возраст
- 52
Рассказывает Энтони Шоу
Вряд ли кто-то вспоминает о Python, когда речь заходит о мобильной разработке. И очень зря, у нас даже есть : для Python тоже существуют инструменты, способные преобразовать ваш код для работы под iOS, Android или Windows Phone.
В этом руководстве я покажу вам, как создать простой пульт (роль пульта будет выполнять iPhone) для телевизоров Panasonic Viera.
Нам понадобятся:
- Xcode, так как мы пишем для iPhone, но пульт также можно сделать и для Android, об этом мы поговорим в конце;
- Желательно Python 3.5;
- Телевизор Panasonic Viera с возможностью подключения к сети.
Загружаем себе — инструмент для конвертирования проект на 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'
]
}
}
)
После этого ваша директория должна выглядеть следующим образом:

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

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

Создаем пульт
Давайте добавим кнопку (цифра 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()
Перезапустим приложение. Если все работает, вы должны увидеть следующее сообщение:

Теперь включаем телевизор и пробуем нажать цифру 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()
Перезапустим приложение и — вуаля — работающий пульт для телевизора!

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