Найти - Пользователи
Полная версия: appuifw
Начало » Mobile Python » appuifw
1
python4ik
Привет. Ув-е,помогите разобраться с модулем appuifw,в частности с его методами app и body. Есть большое желание разобраться,но немного проблемы с англ-м! Инструкции в нете,типа “app является объектом, который не нужно создавать, так как это уже произошло при загрузке модуля — просто используем его возможности” меня не устраивают! Это пояснение практически везде в инете. Я уже понял,что:
appuifw.app.body=можно просто прикрепить к appuifw.Canvas(...) и Text() который по умолчанию,меняется на
Canvas(...),с помощью которого можно выводить графику на экран или
appuifw.app.body=canv=Canvas() и получается,что и appuifw.app.body и canv стают экз-ми класса Canvas(),через которые можно обращаться
к Canvas()-методам.Но я не понял механизм этого присваивания-appuifw.app.body=canv=Canvas(),(как меняется экран)что такое appuifw.app?

инструкция в нете - body-"Отвечает за рабочую область приложения (его «тело»)" - (я согласен,что вам понятно) а взять к примеру функцию -
def handle_redraw(rect):
if img: canvas.blit(img)- тогда эта функция за что отвечает? (appuifw.Canvas(redraw_callback=handle_redraw))
Вот у меня небольшая путанница в этих понятиях!
igor.kaist
Даже не знаю, как тебе объяснить, чтоб ты понял… Спокойствие, только спокойствие.
app.body, это то, что будет показано на экране.
Canvas это “холст”.
Когда ты делаешь так:
canvas=Canvas()
app.body=canvas
это означает, что ты создаешь холст, и говоришь что на экраном должен быть твой холст.
canvas.blit(img) это команда, которая рисует на холсте изображение img… Я не знаю, как еще проще объяснить. Еще раз призываю: хватить заучивать что такое классы, методы и пр. Пора начинать это понимать. Программирование это не тупое заучивание, это прежде всего работа мозга, которая отвечает за логику. И если с этим у вас проблемы, то в программировании делать вам нечего. Уж извините!
На русском языке информации предостаточно. Посмотри статьи Газетдинова Альберта, например.
Здесь я разбирал пример, как раз с использованием Canvas.
python4ik
Та вроде как не заучиваю,понимаю смысл строк,кода,работу классов! Всётаки я ведь хочу понять смысл этих выражений:“appuifw.app.body”,а не просто знать,что appuifw.app.body=canv=Canvas() - выводит холст на экран!
Как вы наверно поняли,проблем с классами у меня уже нет:
через экз-р canv можно обратиться к методам Canvas-а,или не к методам класса, а к переменным класса: допустим переменная Canvas.лобзик . 
К этой переменной можно наследовав обратиться, как canv.лобзик или переназначить свою переменную canv.лобзик="ох и appuifw.app.body!"
Меня интересует,как это,какой-то галимый app.body управляет тем что на экране.
1) Что такое appuifw.app. - это класс или метод или др. модуль?
2) Получается,что такой страшный :) appuifw.app.body(который назначает,что будет на экране) становится обычным экз-м от класса appuifw.Canvas(...).
Как тогда appuifw.Canvas(...) меняет обстановку на экране?Кому он даёт задание перерисовать экран? UI ?
igor.kaist
у меня сейчас взорвется мозг….
app.body сообщает UI серверу, что выводить на экран, в данном случае говорит что за отрисовку чего либо на экране будет отвечать экземпляр класса Canvas(), и поэтому когда UI сервер требует перерисовать экран, после каких то событий (например разворачивание свернутого приложения), вызывается функция, которая задана в конструкторе класса Canvas - redraw_callback, в которой ты сам задаешь, что же нужно отрисовать на экране ( canvas.blit(img) ).
Что тут может быть непонятным?
python4ik
Как вы наверно поняли,проблем с классами у меня уже нет:
у вас проблема с чем то другим……
P.S. И хватит заворачивать текст в тег code
python4ik
И хватит заворачивать текст в тег code
Это понятно,но тут такая фишка:
Возьмём к примеру код,где по нажатию стрелок дж-ка вылазит одно из этого:текст,круг,квадрат,или всё вместе!:
import appuifw, e32, key_codes, graphics

n=0
WHITE = (255,255,255)
RED = (255,0,0)
BLUE = (0,0,255)
YELLOW = (255,255,0)

def draw_rectangle():
img.rectangle((50,100,100,150), fill = YELLOW) - это прорисовка квадрата

def draw_point():
img.point((90,50), outline = RED, width = 30) - это кружок

def draw_text():
img.text((10,40), u'Hello', fill = WHITE) - это бит его за-ногу - текст

def handle_redraw(rect):
if img: canvas.blit(img)

def handle_event(event):
global n
ev = event['keycode']
if event['type'] == appuifw.EEventKeyDown:
img.clear(BLUE) - здесь я так понял очищается всё,что было на экране в синий цвет,
после нажатия любой клавы! Тоесть,даже если нажмётся нижеприведённая клава,сначало очищается экран(тип обр.-ки клавы)
if ev == key_codes.EKeyUpArrow:
draw_point() - это пошла уже сама обработка определённой клавиши(вызов кружка)
elif ev == key_codes.EKeyRightArrow:
draw_text() - ...
elif ev == key_codes.EKeyDownArrow:
draw_rectangle() - ...
elif ev == key_codes.EKeyLeftArrow:
draw_point()
draw_text()
draw_rectangle() - вызываются все сразу!
n+=1 - вот я добавил в этот код n.После запуска этого кода,допустим если вообще
не нажимать кнопки,и сразу выйти,то n=2 после выхода из проги и проверки n.А если нажать
любую кнопку один раз и выйти,то n=5! Почему такие значения n?

handle_redraw(()) - почему,если убрать это выражение,то не работает прога? Тоесть работает,
но нет реагирования на кнопки, в нижней части как и должно быть синий цвет,а большая часть экрана белая!

def quit():
app_lock.signal()

img = None
canvas = appuifw.Canvas(redraw_callback=handle_redraw,
event_callback = handle_event)

appuifw.app.body = canvas
appuifw.app.screen = 'full'
appuifw.app.exit_key_handler = quit

w, h = canvas.size
img = graphics.Image.new((w, h))
img.clear(BLUE)

app_lock = e32.Ao_lock()
app_lock.wait()
igor.kaist
python4ik
handle_redraw(()) - почему,если убрать это выражение,то не работает прога? Тоесть работает,но нет реагирования на кнопки, в нижней части как и должно быть синий цвет,а большая часть экрана белая!
А потому что у вас из головы вылетает все, что вам говорят!
Сколько раз я уже повторил, что происходит в функции redraw!? Как вы увидите изменения на экране, если вы его не перересовываете его после измененией?
Закрываю топик, так как вы получили осчерпывающий ответ. Никто не собирается тратить свое время, если вы даже не пытаетесь понять простейших вещей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB