Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_metadata' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 419 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_metadata' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 419 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_metadata' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 419 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_metadata' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 419 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_metadata' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 419 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_xhtml' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 555 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_xhtml' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 555 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_xhtml' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 555 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_xhtml' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 555 Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doku_Renderer_xhtml' does not have a method 'section_edit' in /customers/oramezo.org/oramezo.org/httpd.www/inc/parserutils.php on line 555

PyS60 Hints

Вывод русского текста

Symbian использует Unicode, но просто вывести текст на русском, подобно тому, как это делается для английского, не проходит. u”Добрый вечер” отображается “крокозябрами”. На некоторых сайтах предлагается записывать все в юникодных строках следующим образом: u”\u0414\u043e\u0431\u0440\u044b\u0439 \u0432\u0435\u0447\u0435\u0440”. Да, строка будет выведена корректно, но вот читабельность исходного текста совершенно пропадает.

Все оказывается очень просто, если, конечно, хорошенько подумать. Вместо u”…” я использую короткую однострочную функцию, точнее, две – для преобразования обычных строк в юникод, и для преобразования юникодных строк в обычные. Вот эти функции:

u = lambda s: s.decode('utf-8')
s = lambda s: s.encode('utf-8')

Везде в тексте я пишу u(“Добрый вечер”), и все замечательно работает.

Как правильно очищать переназначение клавиш

Несмотря на то, что в руководстве написано, что надо просто сказать None последним аргументом метода bind, это часто приводит к падению всего Питона.

Правильно использовать такую команду:

self.editor.bind(key, lambda : None)

Как создать приложение?

Приложение на Питоне для S60 должно содержать несколько обязательных элементов:

  • импорта модулей appuifw и e32, которые необходимы для работы приложения,
  • создания графического интерфейса (включая главное меню),
  • назначения обработчиков клавиатуры (прежде всего обработчика клавиши закрытия приложения),
  • создания “активного объекта”, который предотвратит завершение работы программы до получения им сигнала из обработчика клавиши закрытия.

Вот пример правильного “скелета” приложения, реализованного в духе ООП в виде класса. При запуске заполняет экран белым цветом, выводит заголовок приложения и ждет нажатия клавиши “Exit” (правого софткея).

# firstapp.py: скелет класса-приложения для Pys60
# -*- coding: utf-8 -*-
 
# импортируем нужные модули
import appuifw
import e32
 
# объявляем класс приложения
class MyApp(object):
    '''Простейший класс-приложение Pys60
    '''
    def __init__(self):
        '''Конструктор'''
        # тут разные начальные настройки
        self.title = u'My First App'
        self.canvas = appuifw.Canvas()
 
    def exitEvent(self):
        '''Обработчик нажатия правой кнопки - выход'''
        # сюда можно вставить код, который нужно выполнить перед
        # выходом - сохранение файлов, настроек и т.п.
        # посылаем сигнал активному объекту
        self.app_lock.signal()
 
    def run(self):
        '''Собственно запуск приложения'''
        # здесь код, который нужно выполнить непосредственно в момент запуска приложения
        # например, создание главного меню, заголовка приложения и т.п.
        appuifw.app.title = self.title
        appuifw.app.body = self.canvas
        # устанавливаем обработчик нажатия кнопки выхода
        appuifw.app.exit_key_handler = self.exitEvent
        # создаем активный объект и заставляем его ждать сигнала -
        # это предотвращает закрытие приложения до
        # нажатия кнопки выхода
        self.app_lock = e32.Ao_lock()
        self.app_lock.wait()
 
if __name__ == '__main__':
    # создаем объект-приложение и запускаем его
    app = MyApp()
    app.run()

Как подписать приложение на Symbian Signed

  1. Пойти на https://www.symbiansigned.com/app/page/public/openSignedOnline.do
  2. Ввести:
    • IMEI своего телефона (можно получить набрав *#06# на телефоне),
    • адрес эл. почты,
    • выбрать sis-файл, который вы хотите подписать,
    • ввести капчу,
    • отметить галку "Accept legal agreement"
  3. Нажать "Send"
  4. Спустя несколько минут должно прийти письмо со ссылкой, по которой надо перейти чтобы подтвердить свой адрес
  5. Спустя еще некоторое время придет еще одно письмо, в котором уже будет ссылка для скачивания SIS-файла, подписанного для вашего телефона.