Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2011 20:47:02

AnaT
От:
Зарегистрирован: 2011-03-15
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

«Демоны», что и как делается.

Второй день уже копаюсь и что то никак ничего понять не могу.
Мне нужно что бы демон выводил окно 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'
Вроде бы все и заработало, но окошко появляется буквально на секунду и пропадает…. И еще как правильно запустить «демона»из своего кода?
Вопрос может и глупый, но просто я пока мало чего понимаю и как назло почитать по этому вопросу ничего не нашел.



Офлайн

#2 Март 24, 2011 22:48:23

R.Ll.S.h57
От:
Зарегистрирован: 2010-02-25
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

«Демоны», что и как делается.

e32.start_server(u"E:\\your_script.py")
Пару советов:
1. Окошко исчезает потому, что поток после выполнения вашей функции умирает. Нужно поставить блокировку в конце.
2. appuifw нельзя использовать в демонах,созданных через e32.start_server.



Отредактировано (Март 24, 2011 22:57:02)

Офлайн

#3 Март 25, 2011 14:03:32

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

«Демоны», что и как делается.

Затрагивал вопросы написания “демона” в этой статье http://habrahabr.ru/blogs/python/77452/



Офлайн

#4 Март 26, 2011 21:31:46

AnaT
От:
Зарегистрирован: 2011-03-15
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

«Демоны», что и как делается.

Вроде все понял. Запускаю «демона», убиваю его, это все получается. Но возникла новая проблема…мне надо чтобы окошко выводилось только на главном экране, тоесть код выглядит примерно так:

#-------------------------
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()
Но почему то так оно уже не работает…где я косячу?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version