Маленькие хитрости Python for S60
Содержание
Вывод русского текста
Symbian использует Unicode, но просто вывести текст на русском, подобно тому, как это делается для английского, не проходит. u"Добрый вечер" отображается “крокозябрами”. На некоторых сайтах предлагается записывать все в юникодных строках следующим образом: u"\u0414\u043e\u0431\u0440\u044b\u0439 \u0432\u0435\u0447\u0435\u0440". Да, строка будет выведена порректно, но вот читабельность исходного текста совершенно пропадает.
Все оказывается очень просто, если, конечно, хорошенько подумать. Вместо u"..." я использую короткую однострочную функцию, точнее, две — для преобразования обычных строк в юникод, и для преобразования юникодных строк в обычные. Вот эти функции:
s = lambda s: s.encode('utf-8')
Везде в тексте я пишу u("Добрый вечер"), и все замечательно работает.
Как правильно очищать переназначение клавиш
Несмотря на то, что в руководстве написано, что надо просто сказать None последним аргументом метода bind, это часто приводит к падению всего Питона.
Правильно использовать такую команду:
Приложение на Питоне для S60 должно содержать несколько обязательных элементов:
- импорта модулей appuifw и e32, которые необходимы для работы приложения,
- создания графического интерфейса (включая главное меню),
- назначения обработчиков клавиатуры (прежде всего обработчика клавиши закрытия приложения),
- создания “активного объекта”, который предотвратит завершение работы программы до получения им сигнала из обработчика клавиши закрытия.
Вот пример правильного “скелета” приложения, реализованного в духе ООП в виде класса. При запуске заполняет экран белым цветом, выводит заголовок приложения и ждет нажатия клавиши “Exit” (правого софткея).
# -*- 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()
RSS
Ora Mezo » Blog Archive » Программирование под Symbian:
[...] здесь я буду собирать разные полезные штучки, ссылки и [...]
25 November 2008, 4:32 pm