Python на Symbian S60: объекты, создание интерфейса (модуль appuifw) +пример Interface.py

Точка, точка, запятая...

Мы живем в мире объектов, каждый из которых имеет определенные свойства: цвет, размер, вкус, запах и другие. Эти предметы могут выполнять различные действия — например, авторучка предназначена для письма, а телефон, чтобы по нему звонить.

Аналогично устроен и мир языка Python, вот только объекты в нем называются классами. Характеризуются объекты действиями — методами и свойствами — атрибутами.

Создаются объекты (классы) в языке Python следующим образом:

class имя_объекта:

<инструкции>

Т.е. после ключевого слова class следует имя нового класса, а затем после двоеточия — код на языке Python. Код может содержать как простые инструкции (создание атрибутов), так и определение функций (создание методов):

>>> class new:

...    attribute = ‘Hello’

...    def method(self, name):

...       print self.attribute, name     

...

>>>

Таким образом, мы создали класс (объект) с именем new. Он имеет свойство attribute и действие method. Для того чтобы использовать класс, необходимо создать его экземпляр (делается это как вызов функции) и обозначить переменную, через которую сможем обращаться к атрибутам и методам этого класса. То есть сначала указывается имя объекта, потом ставится точка и, наконец, вводится имя атрибута или метода:

>>> my_class = new()

>>> my_class.attribute

‘Hello’

>>> my_class.method(‘World’)

Hello World

>>>

Атрибуты класса могу быть не только прочтены, но и изменены

>>> my_class.attribute = ‘Good-bye ’

>>> my_class.method(‘Albert’)

Good-bye Albert

>>>

Вам не показалось странным, что мы указали при создании функции method два аргумента (self,name), а при его вызове только один (‘World’)? Дело в том, что Python сам подставляет вместо self имя объекта. Т.е. my_class.method(‘World’) аналогичен method(my_class, ‘World’).

Как видно, первым аргументом метода является self. Он обязателен и используется, когда внутри функций необходимо обращаться к другим атрибутам и методам класса. Любая же переменная внутри функций, не начинающаяся с self, будет являться локальной. Если необходимо при создании объекта указать начальные параметры, то нужно определить функцию с именем __init__:

>>> class new2:

...       def __init__(self, name):

...          self.attribute = name

...         self.method()

...       def method(self)

...          text = ‘Hello’

...          print text, self.name

...

>>> my_class2 = new2(‘Albert’)

Hello Albert

>>>

К сведению, объекты могут и не иметь методов, а содержать только атрибуты — в этом случае они играют роль хранилищ. Причем атрибуты у объекта можно создавать уже и после его создания:

>>> my_class2.new_attribute = 1024

>>> print my_class2.new_attribute

1024

>>>

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

Модули и как их использовать

С точки зрения Python модуль это тоже объект. Он имеет атрибуты и методы, которые мы обычно используем в программе в виде переменных и функций. Кроме того, модуль также может содержать и другие объекты, которые, в свою очередь, имеют атрибуты и методы... и т.д.

Возьмем, к примеру, модуль appuifw. Для того чтобы узнать все его возможности, можно использовать функцию dir(). Набрав dir(appuifw), вы увидите список имен всех тех переменных и функций, которые доступны пользователю. У меня установлена новейшая, на момент написания, версия Python 1.4.0. (не забывайте постоянно обновляться!), и выполнение этой функции дало следующий результат:

>>> import appuifw

>>> dir(appuifw)

[‘Canvas’, ‘Form’, ‘Listbox’, ‘Text’, ‘Icon’, ‘Content_handler’, ‘app’, ‘multi_query’, ‘note, ‘popup_menu’, ‘query’, ‘selection_list’, ‘multi_selection_list’, ‘available_fonts’, ‘EEventKeyUp, ‘EEventKeyDown’, ‘EEventKey’, ‘FFormAutoFormEdit’, ‘FFormAutoLabelEdit’, ‘FFormDoubleSpaced’, ‘FFormEditModeOnly’, ‘FFormViewModeOnly’, ‘STYLE_BOLD’, ‘STYLE_ITALIC’, ‘STYLE_STRIKETHROUGH’, ‘STYLE_UNDERLINE’, ‘HIGHLIGHT_STANDARD’, ‘HIGHLIGHT_ROUNDED’, ‘HIGHLIGHT_SHADOW’, ‘EScreen’, ‘EApplicationWindow’, ‘EStatusPane’, ‘EMainPane’, ‘EControlPane’, ‘ESignalPane’, ‘EContextPane’, ‘ETitlePane’, ‘EBatteryPane’, ‘EUniversalIndicatorPane’, ‘ENaviPane’, ‘EFindPane’, ‘EWallpaperPane’, ‘EIndicatorPane’, ‘EAColumn’, ‘EBColumn’, ‘ECColumn’, ‘EDColumn’, ‘EStaconTop’, ‘EStaconBottom’, ‘EStatusPaneBottom’, ‘EControlPaneBottom’, ‘EControlPaneTop’, ‘EStatusPaneTop’]

>>>

Как видно, данный модуль представляет огромное количество средств для создания уникального интерфейса программы — ее «лица». Какие бы нужные функции программа не выполняла, необходимо обязательно продумать то, как это представить пользователю. А последний (думаю, по себе знаете) терпеть не может разбираться и угадывать то, что умеет программа, а чего нет. Если в программе тяжело разобраться, то она стирается и заменяется аналогом. Поэтому важно уделить время созданию интуитивного интерфейса, и в этом нам поможет модуль appuifw.

От слов перейдем к делу, а конкретно — к диалоговым функциям:

note(text[, type[, global] ]

Создает окно для вывода сообщения, которое держится около 3 секунд. Имеет обязательный аргумент text (строка Unicode) — само сообщение. Второй параметр необязательный и обозначает тип сообщения. По умолчанию равен ‘info’, но может иметь значения ‘error’ и ‘conf’. Третий аргумент, также необязательный, можно выставить на значение 1. В этом случае информационное окошко появится даже тогда, когда сама программа скрыта (свернута):

>>> appuifw.note(‘Hello!’)

>>> appuifw.note(‘Error!’, ‘error’)

>>> appuifw.note(‘OK’, ‘conf’)

>>>

popup_menu(list[, label])

Создает окно с выбором варианта из имеющего списка. Аргумент list должен быть списком строк Unicode, которые и будут являться описанием имеющихся вариантов. При выборе того или иного варианта, функция возвращает его номер. Необязательный аргумент label указывает подпись окошка:

>>> list = [

u’Open’,

u’Delete’,

u’Save’,

u’Load’]

>>> index = appuifw.popup_menu(list, u‘Menu:’)

>>> index

0

>>> list[index]

u’Open’

>>>

popup_menu(list[, label])

 

query(label, type [, initial_value]])

Создает окно для ввода данных. Аргумент label (строка Unicode) указывает подпись окна. Аргумент type указывает тип окна:

1) ‘text’ — ввод текста;

2) ‘code’ — ввод текста в виде звездочек (для паролей);

3) ‘number’ — ввод целого числа;

4) ‘float’ — ввод вещественного числа;

5) ‘date’ — ввод даты;

6) ‘time’ — ввод времени;

7) ‘query’ — вопрос («ОК» или «Отмена»).

Причем:

1) ‘text’и ‘code’ — возвращают текст;

2) ‘number’ и ‘float’ — целое и вещественное число соответственно;

3) ‘date’ и ‘time’ — значение в секундах в виде вещественного числа;

4) ‘query’ — 1 или None.

Необязательный аргумент initial_value определяет значение окна по умолчанию (игнорируется для ‘float’):

>>> appuifw.query(u’Text:’, ‘text’)

u’Hello!’

>>> appuifw.query(u’Code:’, ‘code’)

u’Parol’

>>> appuifw.query(u’Number:’, ‘number’)

2007

>>> appuifw.query(u’Float:’, ‘float’)

1.333333’

>>> appuifw.query(u’Date:’, ‘date’)

1183755600.0

>>> appuifw.query(u’Time:’, ‘time’)

75600.0

>>> appuifw.query(u’Good-bye?’, ‘query’)

1

>>>

type = ‘text’ 

type = ‘code’

type = ‘number’ 

type = ‘float’

type = ‘date’ 

type = ‘time’

type = ‘query’ 

multi_query(label1, label2)

Создает окно, состоящее из двух полей для ввода текста. При нажатии OK — возвращает кортеж из двух введенных строк. Функция вызывается с двумя аргументами: подписи первого и второго полей (строки Unicode):

>>> appuifw.multi_query(u’Text1:’, u’Text2:’)

(u’Hello’, u’World’)

>>>

multi_query(label1, label2)

selection_list(list [, search_field])

Создает окно со списком вариантов, позволяет выбрать один из них. Аргумент list должен быть списком строк Unicode, которые являются описанием имеющихся вариантов. При выборе того или иного варианта функция возвращает его номер. Если необязательный аргумент search_field равен единице, то под окошком появляется поле для поиска:

>>> list = [

u’Symbian’,

u’Window Mobile’,

u’Linux’,

u‘Palm’]

>>> index = appuifw.selection_list(list)

3

>>> list[index]

u’Palm’

>>> appuifw.selection_list(list, 1)

0

>>>

selection_list(list) 

selection_list(list, 1)

multi_selection_list(list [, style=’checkbox’, search_field=0 ])

Создает окно для выбора нескольких вариантов из имеющего списка с помощью установления напротив них флажков. Выбор осуществляется нажатием на джойстик. Аргумент list должен быть списком строк Unicode, которые будут являться описанием имеющихся вариантов. При выборе одного или нескольких вариантов функция вернет их список. Необязательный аргумент style указывает стиль исполнения: по умолчанию он равен «checkbox» (флажки находятся слева), но может быть равен «checkmark» (флажки находятся справа). Если необязательный аргумент search_field равен единице, то под окошком появляется поле для поиска:

>>> list = [

u’Symbian’,

u’Window Mobile’,

u’Linux’,

u‘Palm’]

>>> appuifw.multi_selection_list(list)

(0, 1)

>>>

multi_selection_list(list) 

multi_selection_list(list, search_field =1)

available_fonts()

Возвращает список шрифтов (их имена в Unicode), установленных на смартфоне:

>>> appuifw.available_fonts()

[u'Alpi12', u'Albi12', u'Alp13', u'Alpi13', u'Albi13', u'alp17', u'Alb17b', u'albi17b', u'alpi17', u'Aco13', u'Aco21', u'Acalc21', u'LatinBold12', u'LatinBold13', u'LatinBold17', u'LatinBold19', u'LatinPlain12', u'Acb14', u'Acb30', u'Acp5', u'Nokia Sans S60', u'Nokia Sans SemiBold S60', u'Nokia Sans TitleSmBd S60', u'Series 60 ZDigi']

>>>

app

Является объектом, который не нужно создавать, так как это уже произошло при загрузке модуля — просто используем его возможности. Объект имеет следующие атрибуты:

body

Отвечает за рабочую область приложения (его «тело»). Может быть присвоен один из трех объектов: Text, Canvas, Listbox. Что это за объекты, будет рассказано в следующих статьях.

menu

Этому атрибуту присваивается специального вида список для создания меню (вызывается при нажатии на левую софт-клавишу):

>>> def exit():

...    if appuifw.query(u»You want exit?», «query»)==1:

...      appuifw.app.set_exit()

...

>>> appuifw.app.menu = [(u»Exit»,exit)]

>>>

Теперь попробуйте нажать на левую софт-клавишу (появится меню для выбора нужной функции).

Общий вид списка: [(title1, callback1), (title2, callback2),...,(titleN, callbackN)]. Каждый кортеж состоит из одного элемента в виде строки, отвечающего за имя пункта, и второго элемента в виде имени функции, вызываемой сразу после выбора пункта. Вот пример с несколькими пунктами:

>>> def about():

...      appuifw.note(u’My name Python!’)

...

>>> def exit():

...    if appuifw.query(u»You want exit?», «query»)==1:

...      appuifw.app.set_exit()

...

>>> menu = [

...(u’About’, about),

...(u’Exit’, exit)]

>>> appuifw.app.menu = menu

>>>

Обычное меню.

Если необходимо сделать вложенное меню в каком-нибудь пункте, то вместо имени функции указывается кортеж такого же вида (title1, callback1), (title2, callback2),...,(titleN, callbackN)):

>>> def up():

...      appuifw.note(u‘Up’)

...

>>> def down():

...      appuifw.note(u‘Down’)

...

>>> def left():

...      appuifw.note(u‘Left’)

...

>>> def right():

...      appuifw.note(u‘Right’)

...

>>> def about():

...      appuifw.note(u’My name Python!’)

...

>>> def exit():

...    if appuifw.query(u»You want exit?», «query»)==1:

...      appuifw.app.set_exit()

...

>>> go = (

...(u’Up’, up),

...(u’Down’, down),

...(u’Left’, left),

...(u’Right’, right))

>>> menu = [

...(u’Go’, go),

...(u’About’, about),

...(u’Exit’, exit)]

>>> appuifw.app.menu = menu

>>>

Вложенное меню.

Такая организация списков (на разных строках) не даст запутаться стороннему программисту, да и себе тоже.

screen

Атрибут отвечает за размер видимой части экрана приложения. Может иметь три значения: ‘normal’ (по умолчанию), ‘large’ (средний), ‘full’ (на весь экран — обычно используется в играх):

>>> def normal():

...      appuifw.app.screen = ‘normal’

...

>>> def large():

...      appuifw.app.screen = ‘large’

...

>>> def full():

...      appuifw.app.screen = ‘full’

...

>>> menu = [

...(u’Normal’, normal),

...(u’Large’, large),

...(u’Full’, full)]

>>> appuifw.app.menu = menu

screen = ‘large’ 

screen = ‘full’

screen = ‘normal’

title

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

>>> print appuifw.app.title

u’Python’

>>> appuifw.app.title = u’Hello World!’

>>>

Подпись приложения.

orientation

Атрибут отвечает за ориентацию экрана. Может иметь следующее значения: ‘automatic’ (по умолчанию), ‘portrait’ (портретный режим) и ‘landscape’ (ландшафтный режим). Данный атрибут актуален только для смартфонов с Symbian 9.

>>> appuifw.app.orientation

‘avtomatic’

>>> appuifw.app.orientation = ‘portrait’

>>> appuifw.app.orientation = ‘landscape’

>>>

Атрибуты кончились, переходим к методам объекта app:

exit_key_handler()

Этот метод вызывается при нажатии на правую софт-клавишу (именно на нее обычно нажимают для выхода из программы или отмены действия):

>>> def exit():

...    if appuifw.query(u»You want exit?», «query»)==1:

...      appuifw.app.set_exit()

>>> appuifw.app.exit_key_handler = exit

>>>

Теперь попробуйте нажать на правую софт-клавишу. В общем, ему может быть присвоено имя любой функции.

focus()

Этот метод вызывается при изменении активности приложения: если приложение сворачивается, то эта функция вызывается с аргументом 0, если приложение становится активным — то с аргументом 1:

>>> def call(focus):

...     if focus == 1:

...       print ‘foreground’

...     else:

...       print ‘background’

...

>>> appuifw.app.focus = call

>>>

background

>>>

foreground

>>>

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

full_name()

Метод возвращает полный путь к тому *.app-файлу (на Symbian 9 бывает и *.exe-файл), который запустил нашу *.py-программу (выполняющуюся в данный момент). Очень удобно использовать, когда необходимо получить путь к рабочей папке программы:

>>> appuifw.app.full_name()

u’c:\\system\\apps\\Python\\Python.app’

>>>

uid()

Метод возвращает UID того *.app/*.exe-файла, который запустил нашу *.py-программу (выполняющуюся на данный момент):

>>> appuifw.app.uid()

u’10201515’

>>>

set_exit()

Метод производит немедленный выход из программы (на Nokia 6120 с Symbian 9.2 это не сработало — возможно, и на других то же самое).

layout(id)

Метод возвращает информацию о размере (первый кортеж) и положение (второй кортеж) элементов интерфейса: экрана, различных панелей и т.д. Координаты отсчитываются с левого верхнего угла. Нужная информация выводится в зависимости от переменной id, различные значения которой установлены в модуле appuifw (представлены чуть ниже). Функция доступна только на смартфонах с Symbian 8.1-9.

activate_tab(index) и set_tabs(tab texts[ ,callback=None])

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

Итак, все методы (и атрибуты тоже) объекта app мы изучили. Продолжим рассмотрение модуля appuifw и начнем с переменных, которые могут быть присвоены функции app.layout(id).

EScreen

Размер экрана:

>>> appuifw.app.layout(appuifw.EScreen)

((176, 208), (0, 0))

>>>

EApplicationWindow

Часть экрана, доступная для приложений:

>>> appuifw.app.layout(appuifw.EApplicationWindow)

((176, 208), (0, 0))

>>>

EStatusPane

Часть экрана, где находятся общие элементы для приложений — иконка, название, вкладки и т.д.:

>>> appuifw.app.layout(appuifw.EStatusPane)

((176, 44), (0, 0))

>>>

EMainPane

Часть экрана, где располагается главная панель приложений (рабочая область):

>>> appuifw.app.layout(appuifw.EMainPane)

((176, 144), (0, 44))

>>>

EControlPane

Часть экрана, где находится контрольная панель приложений (надписи над левой и правой софт-клавишами):

>>> appuifw.app.layout(appuifw.EControlPane)

((176, 20), (0, 188))

>>>

ESignalPane

Часть экрана, где располагается индикатор уровня сети:

>>> appuifw.app.layout(appuifw.ESignalPane)

((12, 44), (154, 0))

>>>

EBatteryPane

Часть экрана, где находится индикатор уровня заряда батареи:

>>> appuifw.app.layout(appuifw.EBatteryPane)

((12, 44), (0, 0))

>>>

EContextPane

Часть экрана, где находится иконка приложения:

>>> appuifw.app.layout(appuifw.EContextPane)

((44, 44), (12, 0))

>>>

ETitlePane

Часть экрана, где располагается название приложения:

>>> appuifw.app.layout(appuifw.ETitlePane)

((108, 28), (56, 0))

>>>

ENaviPane

Часть экрана, где расположена навигационная панель (вкладки в Настройках, например):

>>> appuifw.app.layout(appuifw.ENaviPane)

((120, 16), (56, 28))

>>>

EFindPane

Часть экрана, где находится панель поиска (в нижней части Контактов, например):

>>> appuifw.app.layout(appuifw.EFindPane)

((176, 31), (0, 157))

>>>

EWallpaperPane

Часть экрана, где расположены обои (на рабочем столе):

>>> appuifw.app.layout(appuifw.EWalpaperPane)

((174, 143), (1, 45))

>>>

EIndicatorPane

Часть экрана, где располагаются индикаторы наличия входящих SMS, включенного Bluetooth, подключенного кабеля, активированного будильника и т.д.:

>>> appuifw.app.layout(appuifw.EIndicatorPane)

((113, 12), (63, 44))

>>>

EAColumn

Часть экрана, которая используется для отображения мелких рисунков и флажков (например, иконки файлов и папок в Диспетчере файлов):

>>> appuifw.app.layout(appuifw.EAColumnPane)

((20, 144), (0, 44))

>>>

EBColumn

Часть экрана, которая используется для отображения списков строк (например, имена файлов и папок в Диспетчере файлов):

>>> appuifw.app.layout(appuifw.EBColumnPane)

((31, 144), (20, 44))

>>>

ECColumn

Часть экрана, которая используется для отображения данных, вводимые пользователем. Пересекается с EDColumn:

>>> appuifw.app.layout(appuifw.ECColumnPane)

((125, 144), (51, 44))

>>>

EDColumn

Часть экрана, которая используется для отображения дополнительных иконок. Пересекается с ECColumn:

>>> appuifw.app.layout(appuifw.EDColumnPane)

((30, 144), (146, 44))

>>>

EStaconTop

Верхняя левая часть панели контроля и статуса при ландшафтной ориентации экрана (только для Symbian 9).

EStaconBottom

Нижняя правая часть панели контроля и статуса при ландшафтной ориентации экрана (только для Symbian 9).

EControlPaneTop

Верхняя левая часть панели контроля при ландшафтной ориентации экрана:

>>> appuifw.app.layout(appuifw.EControlPaneTop)

((176, 20), (0, 188))

>>>

EControlPaneBottom

Нижняя правая часть панели контроля при ландшафтной ориентации экрана (только для Symbian 9).

EStatusPaneTop

Верхняя левая часть панели статуса при ландшафтной ориентации экрана.

>>> appuifw.app.layout(appuifw.EStatusPaneTop)

((176, 44), (0, 0))

>>>

EStatusPaneBottom

Нижняя часть панели статуса при ландшафтной ориентации экрана (только для Symbian 9).

EUniversalIndicatorPane

Часть экрана, где располагаются индикаторы наличия входящих SMS, включенного Bluetooth, подключенного кабеля, активированного будильника и т.д. (только для Symbian 9).

Так, с параметрами функции appuifw.app.layout() разобрались, продолжим дальнейшее изучение:

Text

Объект-поле — для ввода, вывода и редактирования текста.

Listbox

Объект-список — для работы со списком строк.

Form

Объект-форма — используется для вывода информации и настройки приложения.

Canvas

Объект-холст, на котором можно рисовать и выводить на него картинки.

Icon

Объект для работы с изображениями *.mbm.

Content_handler

Объект для открытия файлов различных типов.

Изучим работу с объектами на примере Content_handler. Создается он так:

new_name = Content_handler()

После создания можно использовать два следующих его метода:

open(filename)

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

>>> content = Content_handler()

>>> content.open(u’c:\\others\\image\\my_image.jpg’)

open_standalone(filename)

Аналогичен предыдущей функции, но приложение запускается отдельно и независимо от программы Python.

Подробное изучение остальных объектов переносится в отдельные статьи. А сейчас — последняя охапка ценных переменных модуля appuifw:

EEventKeyUp, EEventKeyDown, EEventKey

Переменные, используемые в работе объекта Canvas для контроля нажатий клавиш.

FFormAutoFormEdit, FFormAutoLabelEdit, FFormDoubleSpaced, FFormEditModeOnly, FFormViewModeOnly

Переменные, используемые в работе объекта Form для установки вида элементов формы Form.

STYLE_BOLD, STYLE_ITALIC, STYLE_STRIKETHROUGH, STYLE_UNDERLINE, HIGHLIGHT_STANDARD, HIGHLIGHT_ROUNDED, HIGHLIGHT_SHADOW

Переменные, используемые в работе объекта Text для форматирования текста.

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

Великому и могучему посвящается

Существует один тип данных, который является разновидностью строк — строки Unicode (Юникод). Они предоставляют возможность использовать одновременно буквы и символы из нескольких языков, в том числе и русского. Т.е. именно строки Unicode дадут возможность «говорить» вашей программе на родном языке!

Эти строки полностью аналогичны обычным строкам, но начинаются с буквы «u» и содержат управляющие символы, каждый из которых означает один символ:

>>> text = u'\u0423\u0440\u0430! \u042f \u0433\u043e\u0432\u043e\u0440\u044e \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u043e\u043c!'

>>> print text

Ура! Я говорю на русском!

>>>

Я дам таблицу, в которой представлено соответствие между буквами русского алфавита и их управляющими символами. Но также опишу более простой способ, как получить из строки на русском последовательность управляющих символов. Для этого мы используем модуль appuifw. Он содержит функцию query для ввода данных. Устанавливая его второй параметр как «text», мы сможем вводить текстовые данные, при этом обратно функция вернет строку в формате Unicode:

>>> import appuifw

>>> appuifw.query(u’Text:’,’text’)

а \u0430 л \u043b ц \u0446 А \u0410 Л \u041b Ц \u0426 б \u0431 м \u043c ч \u0447 Б \u0411 М \u041c Ч \u0427 в \u0432 н \u043d ш \u0448 В \u0412 Н \u041d Ш \u0428 г \u0433 о \u043e щ \u0449 Г \u0413 О \u041e Щ \u0429 д \u0434 п \u043f ъ \u044a Д \u0414 П \u041f Ъ \u042a е \u0435 р \u0440 ы \u044b Е \u0415 Р \u0420 Ы \u042b ж \u0436 с \u0441 ь \u044c Ж \u0416 С \u0421 Ь \u042c з \u0437 т \u0442 э \u044d З \u0417 Т \u0422 Э \u042d и \u0438 у \u0443 ю \u044e И \u0418 У \u0423 Ю \u042e й \u0439 ф \u0444 я \u044f Й \u0419 Ф \u0424 Я \u042f к \u043a х \u0445 К \u041a Х \u0425

Так как первые 128 символов Unicode совпадают с кодировкой ASC-II, то необходимость использования управляющих символов для букв латинского алфавита и знаков препинания отпадает.

Как, наверно, уже заметили, большинство функций, написанных специально под систему Symbian (из модуля appuifw, например), принимают и отдают строки Unicode. Даже если там только буквы латинского алфавита, все равно эта строка в начале будет иметь букву «u».

Именно для этих случаев существует функция unicode() для преобразования любых данных, будь то число, список или обычная строка, в строку Unicode. При работе с appuifw он является незаменимым помощником:

>>> number = 5/2

>>> appuifw.note(unicode(number))

>>> list = range(1,4)

>>> appuifw.note(unicode(list))

>>>

Вот теперь мы умеем использовать русский язык в своих программах!

Interface.py: пример (скачать)

Вместе со статьей также идет пример Interface.py, в котором представлена работа большинства функций из модуля appuifw. Просто выбирайте из меню Функции нужный пункт и смотрите результат работы. Не помешает просмотреть сам код, где все, что можно, сделано на русском.

Установка:

— копируйте программу на телефон любым удобным способом;

— открываете его через Диспетчер файлов (Рис. 20);

— запустится приложение для установки *.py программ — Python installer (Рис. 21);

— выбирайте пункт Python script, программа скопирует файл в рабочую папку (‘!:\\system\\apps\\Python\\my’ для Symbian 6-8 и ‘!:\\python\\’ для Symbian 9);

— теперь программу можно запустить через сам Python (Рис. 22).

Удачи!

Открываем файл.

Выбираем пункт Python script.

Файл стал доступен для запуска.

Interface.py в работе.






Рекомендуемый контент




Copyright © 2010-2017 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.