Найти - Пользователи
Полная версия: «Демоны», что и как делается.
Начало » Mobile Python » «Демоны», что и как делается.
1
AnaT
Второй день уже копаюсь и что то никак ничего понять не могу.
Мне нужно что бы демон выводил окно TopWindow на экран. На просторах интернета нашел всего один пример:
import appuifw
import e32
import thread

lock = e32.Ao_lock()
lockTHR = thread.allocate_lock()

###### ##############################################
i = 0
def funcDaemon():
global i
while(1):
lockTHR.acquire()
e32.ao_sleep(1)
open('E:\\Others\\tmp.txt', 'a').write(str(i)+"\n")
i+=1
lockTHR.release()
####################################################################

appuifw.app.title = u'DaemonS60'
appuifw.app.exit_key_handler = lambda:lock.signal()

print 'DaemonS60 - Start'

thread.start_new_thread(funcDaemon, ())

lock.wait()

print 'DaemonS60 - Stop'
Заменил в нем функцию на свою:
import appuifw
import e32
import thread
import TopWindow
lock = e32.Ao_lock()
lockTHR = thread.allocate_lock()

#################################

def funcDaemon():
screen = TopWindow.TopWindow()
img =graphics.Image.open(('C:\\img.gif'))
screen.position=(10,50)
screen.add_image(img, (0,0,10,70))
screen.size = (70,90)
screen.corner_type = 'square'
screen.shadow = (7)
screen.show()
####################################################################

appuifw.app.title = u'DaemonS60'
appuifw.app.exit_key_handler = lambda:lock.signal()

print 'DaemonS60 - Start'

thread.start_new_thread(funcDaemon, ())

lock.wait()

print 'DaemonS60 - Stop'
Вроде бы все и заработало, но окошко появляется буквально на секунду и пропадает…. И еще как правильно запустить «демона»из своего кода?
Вопрос может и глупый, но просто я пока мало чего понимаю и как назло почитать по этому вопросу ничего не нашел.
R.Ll.S.h57
e32.start_server(u"E:\\your_script.py")
Пару советов:
1. Окошко исчезает потому, что поток после выполнения вашей функции умирает. Нужно поставить блокировку в конце.
2. appuifw нельзя использовать в демонах,созданных через e32.start_server.
igor.kaist
Затрагивал вопросы написания “демона” в этой статье http://habrahabr.ru/blogs/python/77452/
AnaT
Вроде все понял. Запускаю «демона», убиваю его, это все получается. Но возникла новая проблема…мне надо чтобы окошко выводилось только на главном экране, тоесть код выглядит примерно так:
#-------------------------
def ru(text): return text.decode('utf-8')
#-------------------------
import e32
import TopWindow
import graphics
import appswitch
#-------------------------
screen = TopWindow.TopWindow()
img =graphics.Image.open(('C:\\img.gif'))
screen.position=(10,10)
screen.add_image(img, (0,0,12,12))
screen.size = (12,12)
screen.corner_type = 'square'
screen.shadow = (2)
while 1:
if appswitch.application_list(1)[0]!=ru('Телефон'): screen.hide()
else: screen.show()
e32.ao_sleep(0.1)
e32.Ao_lock().wait()
Но почему то так оно уже не работает…где я косячу?
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